Zuerst, da Beispieldaten nicht zur Verfügung gestellt werden, machte meine eigenen Beispieldaten. Diese Daten sind bereits zusammengefasst (es gibt nur einen Wert pro jeweils Kombinationen von Ebenen.
set.seed(1)
df<-data.frame(expand.grid(c("Control","Effect"),c("Self","Other"),c("Type1","Type2")),
runif(8,0,1))
colnames(df)<-c("Treatment","Group","Type","value")
df
Treatment Group Type value
1 Control Self Type1 0.2655087
2 Effect Self Type1 0.3721239
3 Control Other Type1 0.5728534
4 Effect Other Type1 0.9082078
5 Control Self Type2 0.2016819
6 Effect Self Type2 0.8983897
7 Control Other Type2 0.9446753
8 Effect Other Type2 0.6607978
Nun müssen Sie zwei neue Werte für die Positionen der Zeilen hinzuzufügen. ymin
Wert ist der ursprüngliche Wert plus kleine Konstante. ymax
Wert wird für jede Facette berechnet (Treatment
und Type
als Gruppierung verwendet wird) und Maximalwert in Facette plus einig konstant ist.
library(plyr)
df<-ddply(df,.(Treatment,Type),transform,ymax=max(value)+0.2)
df$ymin<-df$value+0.05
df
Treatment Group Type value ymax ymin
1 Control Self Type1 0.2655087 0.7728534 0.3155087
2 Control Self Type2 0.2016819 1.1446753 0.2516819
3 Control Other Type1 0.5728534 0.7728534 0.6228534
4 Control Other Type2 0.9446753 1.1446753 0.9946753
5 Effect Self Type1 0.3721239 1.1082078 0.4221239
6 Effect Self Type2 0.8983897 1.0983897 0.9483897
7 Effect Other Type1 0.9082078 1.1082078 0.9582078
8 Effect Other Type2 0.6607978 1.0983897 0.7107978
zweiter Datenrahmen für die Etiketten hergestellt wird. Hier in jeder y-Position Facette wieder original ymax
Wert plus etwas Konstante und lab
enthält Etiketten, die Sie anzeigen müssen.
df.names<-ddply(df,.(Treatment,Type),summarise,ymax=ymax[1]+0.1)
df.names$lab<-c("p=0.46","**","***","*")
df.names
Treatment Type ymax lab
1 Control Type1 0.8728534 p=0.46
2 Control Type2 1.2446753 **
3 Effect Type1 1.2082078 ***
4 Effect Type2 1.1983897 *
Wie nun df
bereits Wert zusammengefasst Verwendung geom_bar(stat="identity")
statt stat_summary()
. Zusätzliche Zeilen werden mit zwei geom_segment()
Aufrufen hinzugefügt - zuerst zeichnet eine vertikale Linien und zweite fügt horizontale Linie hinzu. geom_text()
fügt Beschriftungen über den Zeilen hinzu.
ggplot(df, aes(Group,value,fill=Group)) +
geom_bar(stat="identity") + facet_grid(Type~Treatment) +
theme(legend.position="none")+
geom_segment(aes(x=Group,xend=Group,y=ymin,yend=ymax))+
geom_segment(aes(x="Self",xend="Other",y=ymax,yend=ymax))+
geom_text(data=df.names,aes(x=1.5,y=ymax,label=lab),inherit.aes=FALSE)
![enter image description here](https://i.stack.imgur.com/QskOS.png)
Sehr vielen Dank für Ihre Geduld, Didzis. Es ist sehr klar und vollständig für mich. –