【问题标题】:How do I add 1 SD error bars to barplot in R如何在 R 中的 barplot 中添加 1 个 SD 误差线
【发布时间】:2016-09-05 23:55:51
【问题描述】:

首先,我确实尝试点击下面的链接(以及其他一些谷歌的努力......):

Grouped barplot in R with error bars

我的数据集非常小(而且对于任何类型的编程新手,R 仍然让我很困惑)。 我的空间数据看起来像这样的假数据:

Site1 <- c(1, 2, 3, NA, 3, 4, 8, 1, 4)
Site2 <- c(2, 4, 8, 8, 2, NA, 1, 2, 5)
Site3 <- c(5, NA, 4, NA, 8, 1, 3, 4 ,6)
my.data <- cbind(Site1, Site2, Site3)
my.data <- cbind(Site1, Site2, Site3)
my.data <- data.frame(a = c("during", "during", "during", "during",     "after", "after", "after", "after", "after"), my.data)
colnames(my.data) <- c("time", "GA", "GI", "DI")

我想创建每个站点均值的分组条形图,其中误差条表示 1 个标准差,其中“期间”和“之后”按站点(GA、GI、DI)分组。我试图通过创建一个均值数据框并绘制它们来做到这一点。效果很好。除了我不知道如何添加误差线。我将不胜感激任何帮助。我知道这是一个基本问题,但在编码方面我还处于起步阶段。是的。

【问题讨论】:

  • 那么,在另一个答案之后,您究竟在哪里卡住了?我认为没有任何理由不将其作为重复项关闭。显示您的代码,准确描述您遇到问题的位置。我们不是来为您编写代码的,我们是来回答具体的编程问题的。

标签: r


【解决方案1】:

这应该可以解决。请注意,我使用您提供的链接中的代码绘制了 geom_errorbar。而且它似乎工作得很好!

您的问题是您的数据没有正确形成。通过this link 一次

代码-

Site1 <- c(1, 2, 3, NA, 3, 4, 8, 1, 4)
Site2 <- c(2, 4, 8, 8, 2, NA, 1, 2, 5)
Site3 <- c(5, NA, 4, NA, 8, 1, 3, 4 ,6)
my.data <- cbind(Site1, Site2, Site3)
my.data <- cbind(Site1, Site2, Site3)
my.data <- data.frame(a = c("during", "during", "during", "during","after", "after", "after", "after", "after"), my.data)
colnames(my.data) <- c("time", "GA", "GI", "DI")

library(reshape2)
library(dplyr)
data <- reshape(my.data,direction="long", varying=names(my.data)[-1],
                timevar="Site", times=names(my.data)[-1], v.names="value")
df <- data %>% 
  group_by(Site,time) %>%
  summarize(Mean=mean(value,na.rm=T),SD=sd(value,na.rm=T))

library(ggplot2)
ggplot(df, aes(x=Site,y=Mean,fill=time)) +
  geom_bar(position="dodge",stat="identity",color="black") +
  geom_errorbar(aes(ymin=Mean-SD,ymax=Mean+SD),width=0.2,position=position_dodge(0.9))

输出:

【讨论】:

  • 太好了,非常感谢您的帮助!我无法弄清楚我的问题是什么......重塑数据绝对是我问题的关键。再次感谢!
  • 上面的代码对我的大部分数据都很有效。但是,当我将它用于我的完整数据集时,调用 ggplot Don't know how to automatically pick scale for object of type function 后出现以下错误。默认为连续。 data.frame(x = c("DI", "DI", "GA", : arguments 暗示不同的行数:12, 0 中的错误。我想知道是不是因为我的一些网站没有数据?因为在“期间”栏中是零(或实际上是 NA)。
  • 所以我通过将 NA 添加到几个站点来使用假数据测试代码,并且您的代码仍然有效。我只是收到一个警告,有些条没有绘制(由于缺少数据)。这是完全正确的,并且使用假数据集,代码可以工作。只是没有使用我的真实数据......我检查了数据集的格式/形状,它看起来与假数据一模一样,除了我在真实数据中还有几个站点。我很困惑!
  • 好的,我检查了代码,我有一个错字......所以现在可以工作了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-25
  • 2021-10-07
  • 2018-08-01
  • 1970-01-01
  • 2019-09-17
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多