Добавьте сегмент только к одному аспекту, используя ggplot2

В качестве примера у меня есть этот фрейм данных с именем 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

создан с помощью этого кода

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"))

Затем с помощью этого кода:

    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))

Я получаю этот сюжет

введите здесь описание изображения

Как видите, с линией geom_segment(x=0.8,y=100,xend=1.2,yend=100) появляются четыре сегмента, по одному на каждую грань, но я хочу нарисовать сегмент только в одной грани (например, на верхнем левом графике).

Может ли кто-нибудь помочь мне, пожалуйста? Я пробовал разные решения, но ничего.


person this.is.not.a.nick    schedule 04.07.2014    source источник


Ответы (1)


Поместите данные для сегмента во фрейм данных, а также добавьте столбцы FactorB и FactorC с уровнями, для которых вам нужно нарисовать сегмент.

data.segm<-data.frame(x=0.8,y=100,xend=1.2,yend=100,
                      FactorB="Condition1",FactorC="Condition1")

Теперь используйте этот фрейм данных, чтобы добавить сегмент. Также добавьте inherit.aes=FALSE внутри geom_segment(), чтобы игнорировать fill=FactorA, установленный в ggplot().

  + geom_segment(data=data.segm,
               aes(x=x,y=y,yend=yend,xend=xend),inherit.aes=FALSE)+

введите здесь описание изображения

person Didzis Elferts    schedule 04.07.2014
comment
Дидзис, я обновил свой вопрос, потому что для простоты я не вставил планки ошибок, а они мне нужны. Я думал, что это не важно, извините. Я не могу переместить fill=FactorA, потому что это меняет правильное положение планок погрешностей. Не могли бы вы обновить свой ответ, пожалуйста? Большое спасибо за Вашу помощь. - person this.is.not.a.nick; 04.07.2014
comment
Я использовал это, чтобы решить похожую проблему, спасибо. Есть ли способ изменить цвет и тип линии сегмента? Я попытался добавить linetype="dashed", colour="red" при создании фрейма данных, но сегмент все еще сплошной и черный. - person user2568648; 29.04.2015
comment
Изменить: добавление этого непосредственно в geom_segmentcall работает нормально. - person user2568648; 29.04.2015