在堆叠的`geom_bar()`中使误差线与组均值垂直对齐

时间:2018-09-18 14:59:37

标签: r ggplot2 dplyr

this post中所述,需要对标准误差线进行求和才能正确添加到堆叠的柱状图中。我有很多小组(下面包括数据子集),使得手动方法无法实现。在related question中,似乎可以用dplyrcumsum()中完成一个更简单的选择,但是当植入我的数据时,仍然不能正确地垂直对齐误差线。

利用下面包含的Dat,我试图实现以前文章中的代码,如下所示:

Dat <- Dat %>% 
  group_by(Group) %>% 
  mutate(Upper = cumsum(MeanReSc) + SD/sum(MeanReSc),
         Lower = cumsum(MeanReSc) - SD/sum(MeanReSc)) %>% 
  as.data.frame()

ggplot(Dat, aes(x=Group, y=MeanReSc, fill=MigStratFact)) +
  geom_bar(stat="identity") +
  geom_errorbar(aes(ymin = Lower, ymax = Upper), width = .2, col = "black") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) 

enter image description here

虽然该代码适用于某些组(例如BBB),但我无法为拍摄带来麻烦,原因是它不适用于所有MigStratFact的所有Group。任何建议将不胜感激。

Dat <- structure(list(MigStratFact = structure(c(3L, 2L, 4L, 1L, 4L, 
3L, 2L, 1L, 2L, 1L, 3L, 1L, 2L, 4L, 2L, 3L, 1L, 2L, 1L, 3L, 1L, 
2L, 4L, 3L), .Label = c("Resident", "ShortDist", "MidDist", "LongDist"
), class = "factor"), SD = c(0, 0.0263523138347365, 0.0241522945769824, 
0.0394405318873308, 0.0198614530574739, 0.0256410256410256, 0.032433617027368, 
0.024325212770526, 0.0354998513446837, 0.0354998513446838, 0.0189196099326313, 
0.0173063732746296, 0.032433617027368, 0.0289318781178922, 0.0547246897356821, 
0.0416666666666667, 0.0547246897356821, 0, 0.0517549169506766, 
0.0737864787372622, 0.0199422915506114, 0.0199422915506114, 0.0139566967430898, 
0.0139566967430898), MeanReSc = c(0.1, 0.175, 0.215, 0.51, 0.0923076923076923, 
0.269230769230769, 0.284615384615385, 0.353846153846154, 0.0869565217391304, 
0.91304347826087, 0.0743589743589744, 0.197435897435897, 0.728205128205128, 
0.0769230769230769, 0.116923076923077, 0.246153846153846, 0.56, 
0.097323600973236, 0.1338199513382, 0.768856447688564, 0.159459459459459, 
0.191891891891892, 0.286486486486487, 0.362162162162162), Group = c("AAA", 
"AAA", "AAA", "AAA", "BBB", "BBB", "BBB", "BBB", "CCC", "CCC", 
"DDD", "DDD", "DDD", "EEE", "EEE", "EEE", "EEE", "FFF", "FFF", 
"FFF", "GGG", "GGG", "GGG", "GGG")), row.names = c(NA, -24L), class = "data.frame")

0 个答案:

没有答案