2016-06-11 7 views
1

Ich versuche, ein Streudiagramm mit Ggplot, die eine kontinuierliche X-Achse, aber mit einem großen Zeitabstand zwischen zwei der Punkte hat. Zeitpunkte sind 20, 40, 60, 90, 120, 500, 520. Sie müssen kontinuierlich sein, weil ich möchte, dass die ersten 5 Werte skaliert werden, aber dann möchte ich eine Pause in der Achse zwischen 120 und 500. Ich bin mir bewusst der Probleme mit der Achse bricht allgemeiner, (this SO question), aber meine Frage bezieht sich auf die x-Achse nicht y-Achse.R ggplot2 X-Achse bricht

Beispieldaten;

EG.df <- data.frame(AGE = c(20, 20, 40, 40, 60, 60, 90, 90, 120, 120, 500, 500, 520, 520), 
        S1 = c(28, 30, 21, 15, 18, 19, 18, 21, 16, 17, 21, 21, 19, 13)) 

ggplot(EG.df, aes(x=AGE, y=S1)) + 
    geom_point(size=10) 

ich denke, es mit dem plotrix Paket möglich sein könnte (? - Ich habe es nie benutzt), aber ich würde es vorziehen, ggplot zu verwenden. Irgendwelche Vorschläge?

Antwort

1

Hier ist ein wirklich schneller Stich mit nur ggplot2. Ich benutze dplyr nur für die Manipulation, also nicht wirklich benötigt.

Zuerst teilen wir die Daten in die Teile auf, die Sie plotten möchten. Dies kann wahrscheinlich automatisch mit den Daten geschehen, aber hier setze ich die Schnitte manuell. Der Schlüssel ist, zwei Gruppen zu erstellen (vorher/nachher).

Jetzt, da Sie einen Datenpunkt in der Lücke haben, die Sie schneiden möchten, benutzte ich Filter, um diese Facette nicht anzuzeigen. Fühlt sich nicht so sauber an.

EG.df <- EG.df %>% 
    mutate(cut = cut(AGE, breaks = c(0,120,500,600))) %>% 
    filter(cut != "(120,500]") 

Jetzt, wenn wir planen, verwenden wir Facetten, um die Lücke zu erzeugen. Dies bedeutet, dass wir einen Facettenstreifen mit dem geschnittenen Etikett haben werden. Der Schlüssel verwendet scales="free_x", um die X-Achse automatisch anzupassen.

ggplot(EG.df, aes(x=AGE, y=S1)) + 
+  geom_point(size=10) + facet_grid(.~cut, scales="free_x") 

example

hielt ich die Größe der Punkte gibt. Sie können die Streifen entfernen, indem Sie ein Thema hinzufügen.

theme(
    strip.text.x = element_blank(), 
    strip.background = element_blank()) 

Sie werden feststellen, dass die zwei Achsenbeschriftungen ineinander schneiden. Ich überlasse das dem Leser als Übung, um die Achsen zu reparieren.

+0

Danke für die schnelle Antwort, funktioniert für mich. – EcologyTom