【问题标题】:Error bars incorrectly positioned in a stacked bar graph in r错误条错误地定位在 r 中的堆积条形图中
【发布时间】:2020-12-01 16:51:45
【问题描述】:
library(ggplot2)
library(plyr)
library(dplyr)
library(reshape2)


ggplot(df, aes(x=Treatment, y=Mean, fill=variable))+
           facet_wrap(~Gen)+geom_bar(stat="identity", colour="black")+
           ggtitle("G")+xlab("Stress Treatment")+ylab("Variable level")+
           geom_errorbar(aes(ymin=Mean-se, ymax=Mean+se), size=0.5,
           width=0.3, position="identity", colour="black")

stacked barplot produced using above codes

我正在尝试制作带有误差线的堆叠条形图,有人可以帮助我如何在堆叠图中正确定位误差线以及方差分析字母吗?

数据

https://docs.google.com/spreadsheets/d/1b734dNdd4AeVvPmB6dSmHanSPPwbJ0TfOhfPjJDswTI/edit?usp=sharing

【问题讨论】:

  • 如果您包含一个简单的reproducible example 以及可用于测试和验证可能的解决方案的示例输入,则更容易为您提供帮助。
  • 由于我是stackoverflow的新手,无法发布数据和图片,一旦我获得10的信誉分数,我就可以发布它,还有其他方法可以发布数据和图片吗?

标签: r ggplot2


【解决方案1】:

这应该做你想做的:

基本上,您必须添加平均值以适合堆栈,同时保持 geom 使用的顺序。可能有更有效的方法来生成 tmp 但这有点过了。

tmp <- unlist( lapply( seq(0,138,by=6), function(x) c(
df$Mean[3+x]+df$Mean[6+x]+df$Mean[2+x]+df$Mean[1+x],
df$Mean[3+x]+df$Mean[6+x]+df$Mean[2+x],
df$Mean[3+x],
df$Mean[3+x]+df$Mean[6+x]+df$Mean[2+x]+df$Mean[1+x]+df$Mean[5+x]+df$Mean[4+x],
df$Mean[3+x]+df$Mean[6+x]+df$Mean[2+x]+df$Mean[1+x]+df$Mean[5+x],
df$Mean[3+x]+df$Mean[6+x] ) ) )
df <- cbind( df, Mean_2=tmp )
ggplot(df, aes(x=Treatment, y=Mean, fill=variable))+
           facet_wrap(~Gen)+geom_bar(stat="identity", colour="black")+
           ggtitle("G")+xlab("Stress Treatment")+ylab("Variable level")+
           geom_errorbar(aes(ymin=Mean_2-se, ymax=Mean_2+se), size=0.5,
           width=0.3, position="identity", colour="black")

结果:

【讨论】:

  • 感谢您的帮助,我是“R”的新手,如果您可以分享一些链接/材料来理解“tmp”脚本以便使用其他同类数据,那将是很棒。
  • 这里有一个类似的问题,答案很好 (stackoverflow.com/questions/30872977/…)。一个有趣的阅读。我这里的具体解决方案是给geom_errorbar一个帮助,即“Mean_2”列。它只是采用原始平均值并在图中添加位于下方的其他平均值。由于 geom_bar 具有内部排序,因此您必须在图中检查以相应地在 Mean_2 列中生成堆叠。
  • 我已经尝试过使用我的数据,但没有运气。我是“R”的新手,无法理解 tmp 脚本在特定位置放置错误栏。感谢您的帮助安德烈。
  • 我是如何做到的: 1. 将您的数据复制到一个文件中。 2. read.csv() 你的数据到变量“df”中。 3. 生成 tmp 向量(见第一个框)。 4. 将“tmp”绑定到 df 并将列命名为“Mean_2”(参见第二个框)。 5. 正是您的 ggplot 脚本,只需将“Mean”替换为“Mean_2”即可。 -- Mean_2 列中的值(来自 tmp)只是您的平均值,但在需要时添加,因为它们是堆叠的,因为该图是堆叠的条形图。它不会自动执行此操作,因为开发人员发现将误差线添加到堆叠条形图中没有用。
  • 亲爱的安德烈,感谢您帮助我,如果您能帮我解释第一个框中的 tmp 脚本,那就太好了。我的问题是你是如何写出 [1+x]、[2+x]、[3+x] 等值的; tmp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
相关资源
最近更新 更多