2017-06-20 7 views
1

Ich versuche, jittered Punkte zwischen Messungen von zwei verschiedenen Methoden (messen) auf einer X-Achse zu verbinden. Diese Messungen verknüpft sind miteinander durch die Probandinnen (a) können, die in zwei Hauptgruppen aufgeteilt werden, Patienten (pat) und Kontrollen (ctr), My df ist so:ggplot: Verbinden jedes Punktes innerhalb einer Gruppe auf diskreter x-Achse

set.seed(1) 
a<- rep(paste0("id","_",1:20),each=2) 
value<- sample(1:10,40,rep=TRUE) 
measure<- rep(c("a","b"),20) 
group<- rep(c("pat","ctr"),each=2,10) 
df<-data.frame(a,value,measure,group) 

ich versuchte

ggplot(df,aes(measure,value,fill=group))+geom_point(position=position_jitterdodge(
     jitter.width=0.1,jitter.height=.1, 
     dodge.width=.75), 
     shape=1)+ 
geom_line(aes(group=a),position=position_dodge(.75)) 

I die Füllung ästhetische, um die Jitter behafteten Punkten aus beiden Gruppen (patund c zu trennen verwendet tr). Ich erkannte, dass wenn ich die Gruppe = eine Ästhetik in den Hauptaufruf von ggplot einfüge, sie sich nicht so gut trennt, sondern besser mit den Punkten zu verknüpfen scheint. (Fig1 with group aes in ggplot call, Bild 2 with group aes in geom_line

Meine Frage: Gibt es eine Möglichkeit, die Leitungen zu den (Jitterbasierten) Punkten besser zu verbinden, aber die Trennung der beiden Hauptgruppen zu halten, ctr und pat

vielen Dank.

+0

[Diese Frage] (https://stackoverflow.com/questions/39533456/r-how-to-jitter-both-geom-line-and-geom-point-in- ggplot2-linegraph/39533567 # 39533567) scheint eng verwandt zu sein. Eine der Antworten zeigt, wie man die Punkte manuell jittert. – aosmith

+0

Danke für Ihre schnelle Antwort. Leider funktionieren beide Antworten aus diesem vorgeschlagenen Beitrag nicht für mein Problem, da beide Antworten die Zeilen nicht in die beiden Hauptgruppen (ctr und pat) trennen. – Tjebo

+0

[Diese Antwort] (https://stackoverflow.com/a/37022723/ 2461552) zeigt einen anderen Ansatz über "Interaktion". Der Nachteil ist, dass es Ihre Achsen in Ihrem speziellen Fall ändert. Die einzige andere Möglichkeit, die mir einfällt, ist das manuelle Ausweichen und Jittering der Daten. – aosmith

Antwort

2

Das große Problem das Sie haben, ist, dass Sie die Punkte von nur group sind ausweichen, aber die Linien werden von a sowie ausgewichen.

Um Ihre Linien mit den Achsen unverändert zu lassen, können Sie Ihre Daten manuell ausweichen. Dies nutzt die Faktoren aus, die ganze Zahlen unter der Haube sind, wobei ein Level von group nach rechts und das andere nach links verschoben wird.

df = transform(df, dmeasure = ifelse(group == "ctr", 
            as.numeric(measure) - .25, 
            as.numeric(measure) + .25)) 

Sie können dann ein Grundstück mit measure als die x-Achse machen, aber dann in geom_point und geom_line die „ausgewichen“ Variable als die x-Achse Variable.

ggplot(df, aes(x = measure, y = value)) + 
    geom_blank() + 
    geom_point(aes(x = dmeasure), shape = 1) + 
    geom_line(aes(group = a, x = dmeasure)) 

enter image description here

Wenn Sie auch jittering wollen, dass auch manuell beide Sie x- und y-Variablen hinzugefügt werden können.

df = transform(df, dmeasure = ifelse(group == "ctr", 
            jitter(as.numeric(measure) - .25, .1), 
            jitter(as.numeric(measure) + .25, .1)), 
       jvalue = jitter(value, amount = .1)) 

ggplot(df, aes(x = measure, y = jvalue)) + 
    geom_blank() + 
    geom_point(aes(x = dmeasure), shape = 1) + 
    geom_line(aes(group = a, x = dmeasure)) 

enter image description here

+0

Genau das habe ich gesucht. Prost! – Tjebo

Verwandte Themen