As an example, I have this data frame, called my_data
:
Groups FactorA FactorB FactorC N value sd se ci
1 Control Condition1 Condition1 Condition1 3 92.00000 6.0827625 3.511885 15.110420
2 Control Condition1 Condition1 Condition2 2 69.00000 8.4852814 6.000000 76.237228
3 Control Condition1 Condition2 Condition1 3 72.33333 10.2632029 5.925463 25.495209
4 Control Condition1 Condition2 Condition2 2 97.00000 2.8284271 2.000000 25.412409
5 Control Condition2 Condition1 Condition1 3 85.00000 13.0000000 7.505553 32.293790
6 Control Condition2 Condition1 Condition2 2 78.50000 16.2634560 11.500000 146.121354
7 Control Condition2 Condition2 Condition1 3 95.00000 5.1961524 3.000000 12.907958
8 Control Condition2 Condition2 Condition2 2 78.00000 22.6274170 16.000000 203.299276
9 Experimental Condition1 Condition1 Condition1 2 80.00000 5.6568542 4.000000 50.824819
10 Experimental Condition1 Condition1 Condition2 3 74.00000 19.9248588 11.503623 49.496093
11 Experimental Condition1 Condition2 Condition1 2 68.50000 0.7071068 0.500000 6.353102
12 Experimental Condition1 Condition2 Condition2 3 78.66667 18.5831465 10.728985 46.163095
13 Experimental Condition2 Condition1 Condition1 2 81.00000 19.7989899 14.000000 177.886866
14 Experimental Condition2 Condition1 Condition2 3 75.33333 17.0391706 9.837570 42.327646
15 Experimental Condition2 Condition2 Condition1 2 81.50000 14.8492424 10.500000 133.415150
16 Experimental Condition2 Condition2 Condition2 3 78.00000 5.2915026 3.055050 13.144821
created with this code
my_data <- data.frame(Groups=c(rep("Control",20),rep("Experimental",20)),
FactorA=rep(c("Condition1","Condition2"),20),
FactorB=rep(c("Condition1","Condition1","Condition2","Condition2"),10),
FactorC=rep(c(rep("Condition1",4),rep("Condition2",4)),5),
value=sample(60:100,40,replace=T)
)
# add standard errors with a specific function
my_data <- summarySE(my_data,
measurevar="value",
groupvars=c("Groups","FactorA","FactorB", "FactorC"))
Then, with this code:
ggplot(my_data, aes(Groups,value,fill=FactorA)) +
geom_bar(position=position_dodge(), stat="identity") +
geom_errorbar(aes(ymin=value-se, ymax=value+se),
width=.1, # Width of the error bars
position=position_dodge(.9)) +
facet_grid(FactorB~FactorC) +
geom_segment(x=0.8,y=100,xend=1.2,yend=100) +
theme(axis.text.x=element_text(size=12, colour="black"),
axis.title.x=element_blank(),
legend.key.size=unit(1,"cm"),
legend.text=element_text(size=14),
plot.title=element_text(lineheight=.8, face="bold"),
panel.margin=unit(1, "lines"),
axis.title.y = element_text(size = 16, vjust=0.3),
strip.text.y = element_text(size=16,face="bold"),
strip.text.x = element_text(size=16,face="bold")) +
coord_cartesian(ylim=c(60, 120))
I obtain this plot
As you can see, with the line geom_segment(x=0.8,y=100,xend=1.2,yend=100)
there appear four segments, one for each facet, but I want to draw a segment only in one facet (for example in the upper left plot).
Could someone help me, please? I tried various solutions but nothing.
Put the data for the segment in data frame and also add columns FactorB
and FactorC
with levels for which you need to draw the segment.
data.segm<-data.frame(x=0.8,y=100,xend=1.2,yend=100,
FactorB="Condition1",FactorC="Condition1")
Now use this data frame to add segment. Also add inherit.aes=FALSE
inside geom_segment()
to ignore fill=FactorA set in ggplot().
+ geom_segment(data=data.segm,
aes(x=x,y=y,yend=yend,xend=xend),inherit.aes=FALSE)+
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With