堆积条形图ggplot上的单个错误栏

时间:2014-04-22 07:55:18

标签: r ggplot2 stacked

我一直在尝试绘制一个堆积条形图,每个单独的条形图上面都有一个错误条,而不是条形图中的每个部分。我可以设法为每个部分绘制所有错误栏,但没有找到绘制单个错误栏的解决方案。

这是数据框df

    Sp  Type    Or        Rate        se

1  H   Dis     Bottom    14.5454545  8.0403025
2  H   Dis     Top       2.7272727   1.9403407
3  H   Dis     WP        0.9090909   0.9090909
4  H   He      Bottom    5.4545455   1.4845392
5  H   He      Top       15.4545455  5.0797135
6  H   He      WP        0.0000000   0.0000000
7  H   HeDis   Bottom    9.0909091   3.8330638
8  H   HeDis   Top       8.1818182   4.1659779
9  H   HeDis   WP        3.6363636   2.0100756
10 N   Dis     Bottom    19.0909091  8.9329715
11 N   Dis     Top       0.0000000   0.0000000
12 N   Dis     WP        0.0000000   0.0000000
13 N   He      Bottom    22.7272727  7.0743137
14 N   He      Top       0.0000000   0.0000000
15 N   He      WP        3.6363636   2.7773186
16 N   HeDis   Bottom    14.5454545  5.2835139
17 N   HeDis   Top       10.0000000  4.3808583
18 N   HeDis   WP        0.0000000   0.0000000

这是我的脚本绘制堆积条形图,其中条形图中的每个部分都有误差条(每个错误条的位置不正确但这并不重要,因为这不是我想要的):

dodge<- position_dodge(width = 0.65)
cols <- c(Top="darkgrey",Bottom="lightgrey", Well_plate="white") 
Stacked_plot_bis<-ggplot(df,
aes(x=factor(Type),y=Rate,fill=factor(Or))) +
geom_bar(aes(width=.65), stat="identity",colour="black")+
geom_errorbar(aes(ymin=Rate-se,ymax=Rate+se), position="dodge",colour="black",
width=.65)+
scale_fill_manual(values = cols)+
facet_grid(. ~ Sp)

这会绘制每个条形中所有部分的误差线,如何在每个单独的条形图上绘制单个整体误差条,但不考虑各个部分,而只考虑每个类型的整体值?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以创建一个虚拟数据集(我用data.table包完成)来计算mean(se)(虽然我不认为这是最好的做法)和将其绘制如下(我已经改变了误差线的颜色,因此你可以更好地看到它们)

dodge<- position_dodge(width = 0.65)
cols <- c(Top="darkgrey",Bottom="lightgrey", Well_plate="white") 
library(data.table)
Dummy <- data.table(df)[, list(Rate = sum(Rate), se = mean(se), Or = "WP"), by = c("Sp", "Type")] 
ggplot(df,aes(x=factor(Type),y=Rate,fill=factor(Or))) +
  geom_bar(aes(width=.65), stat="identity",colour="black")+
  geom_errorbar(data = Dummy, aes(ymax = Rate +se, ymin=  Rate -se), position="dodge", colour="red", width=.65)+
  scale_fill_manual(values = cols)+
  facet_grid(. ~ Sp)

enter image description here