【问题标题】:stacked bar plot with error bars in RR中带有误差线的堆积条形图
【发布时间】:2014-05-08 10:11:33
【问题描述】:

我想绘制带有误差线的堆积条形图。我有一个包含五个变量的数据框。 Var1 在Var2 中包含处理对三种不同物种的影响。治疗效果在变量value 中给出。变量startend 包含误差线的值。我想以 Var1 和 Var2 的顺序应该相同的方式绘制堆积条形图。像这样的:

这个数字只是一个例子。一些示例数据:

Var1    Var2    value   start   end
Eff1    spe1    0.73    0.72    0.74
Eff2    spe1    0.25    0.24    0.26
Eff3    spe1    0.007   0.006   0.008
Eff1    spe2    0.69    0.68    0.7
Eff2    spe2    0   0   0
Eff3    spe2    0.3 0.29    0.31
Eff1    spe3    0.78    0.77    0.79
Eff2    spe3    0   0   0
Eff3    spe3    0.212   0.2 0.22

表中数值与上图不符。谢谢你的建议。

【问题讨论】:

  • 我认为this 可能会有所帮助。在 google 中试试你的标题,你会得到很多答案:)
  • 在您的数据框中,“开始”和“结束”在哪里?
  • 误差条与堆积条形图相结合的问题是,误差条将按堆积条的每一级绘制,这就是你想要的吗?或者你想如何聚合它们?你可以在这里看到我的答案:stackoverflow.com/questions/23213717/…
  • 对不起,现在更正了@ramesh
  • 查看我编辑的答案,我还添加了dodge 所以他们不会进化

标签: r plot


【解决方案1】:
df <- read.table(text="
Var1    Var2    value   ybegin  yend
Eff1    spe1    0.73    0.72    0.74
Eff2    spe1    0.25    0.24    0.26
Eff3    spe1    0.007   0.006   0.008
Eff1    spe2    0.69    0.68    0.7
Eff2    spe2    0   0   0
Eff3    spe2    0.3 0.29    0.31
Eff1    spe3    0.78    0.77    0.79
Eff2    spe3    0   0   0
Eff3    spe3    0.212   0.2 0.22", header = T)
str(df)

df[df$Var1 == "Eff2", "ybegin"] <- df[df$Var1 == "Eff2", "ybegin"] + df[df$Var1 == "Eff1", "value"]
df[df$Var1 == "Eff2", "yend"] <- df[df$Var1 == "Eff2", "yend"] + df[df$Var1 == "Eff1", "value"]
df[df$Var1 == "Eff3", "ybegin"] <- df[df$Var1 == "Eff3", "ybegin"] + df[df$Var1 == "Eff2", "ybegin"]
df[df$Var1 == "Eff3", "yend"] <- df[df$Var1 == "Eff3", "yend"] + df[df$Var1 == "Eff2", "yend"]

library(ggplot2)
dodge <- position_dodge(width = 0.9)
cols <- c("black", "white", "darkgrey") 
limits <- aes(ymax = yend , ymin = ybegin)
ggplot(df, aes(x = Var2, y = value, fill = Var1)) + geom_bar(stat="identity", color = "black") + 
  scale_fill_manual(values = cols) +
  geom_errorbar(limits, colour = "red", width = 1,  position = dodge) + 
  theme_bw() +
  theme(panel.grid.major = element_blank() ,panel.grid.minor = element_blank()) 

【讨论】:

  • 我们应该如何解释这个?
  • @PauloCardoso,它只是每个 Sep[i] 每个 Eff[i] 的误差线。我同意它很难阅读,因为它是堆积的,这就是为什么我提出我的其他答案(见 cmets),但 OP 不希望这样
  • @PauloCardoso Cardoso 和 David Arenburg 你们都是对的。根据我的问题,我得到了遮阳篷。但我意识到理想情况下,在每个级别的顶部都有误差线会很好。
  • @PauloCardoso,请参阅上面的编辑。添加了dodge,所以不会重叠
  • @mariariaz,如果您的级别在真实数据集中没有重叠,您可以删除, position = dodge 表单geom_errorbar,您可能会得到更好的情节,就像您附加的链接中一样
【解决方案2】:

在我看来,带有误差线的堆叠条形图并不是最佳选择。为了比较一个带有错误条的闪避条形图的示例:

ggplot(df, aes(x=Var2, y=value, fill=Var1)) + 
  geom_bar(stat="identity", color="black", position=position_dodge(width = 0.9)) + 
  geom_errorbar(aes(ymax=yend, ymin=ybegin), width=0.6, position=position_dodge(width = 0.9)) + 
  theme_bw() +
  theme(panel.grid.major.x = element_blank(), panel.grid.minor = element_blank())

导致:

【讨论】: