【问题标题】:Means barplot with confidence intervals?表示带有置信区间的条形图?
【发布时间】:2020-02-27 06:06:30
【问题描述】:

我有一个大型数据集,其中有一个变量 Q1,有 7 个响应/值选项和两个组(OneTwo)。

 Q1<- c(6,4,2,4,7,1,4,7,4,5,4,4,2,6,1)
 Group<- c(One, Two, One, Two,Two, Two, One, One, One, One, Two, One, One, Two, Two)    

我正在尝试转换一个简单的频率图(按组在每个响应类别中的观察数),而是用置信区间绘制均值(如下图所示)。

df1<- filter(df, Q1!="-99",df$Group=="One"|df$Group=="Two") 
ggplot(data = df1, aes(x = Q1)) +
geom_bar(aes(fill = df1$Group), position = "dodge", stat="summary", fun.y="mean") + labs(title="Graph Title")

当我运行它时,我收到以下错误:

Error: stat_summary requires the following missing aesthetics: y

感谢任何想法!

【问题讨论】:

  • 您应该发布您的数据样本,或随机生成的与您的结构相似的数据,以便我们创建解决方案。

标签: r ggplot2 bar-chart confidence-interval aesthetics


【解决方案1】:

这是一个例子。您需要自己预先计算 CI:

library(dplyr)
library(ggplot2)

set.seed(123)

df <- data.frame(g = c(rep("A",10),rep("B",10),rep("C",10)),
           val = c(rnorm(10,100,5), rnorm(10,200,10), rnorm(10,300,50)))

df <- df %>% group_by(g) %>% summarise(m = mean(val),
                                       stdv = sd(val))

ggplot(df, aes(g,m,fill=g)) + 
  geom_bar(stat="identity", color="black", 
           position=position_dodge()) +
  geom_errorbar(aes(ymin=m-stdv, ymax=m+stdv), width=.2,
                position=position_dodge(.9)) 

输出

更新

df <- data.frame(
  Q1 = c(6,4,2,4,7,1,4,7,4,5,4,4,2,6,1),
  Group = sample(c("One","Two"), 15, TRUE),
  stringsAsFactors = FALSE)

df <- df %>% group_by(Group) %>% summarise(m = mean(Q1),
                                       stdv = sd(Q1))

ggplot(df, aes(Group,m,fill=Group)) + 
  geom_bar(stat="identity", color="black", 
           position=position_dodge()) +
  geom_errorbar(aes(ymin=m-stdv, ymax=m+stdv), width=.2,
                position=position_dodge(.9))

【讨论】:

  • 这给了我以下错误:Error in mean(val) : object 'val' not found
  • @IG114 使用其值列名为val 的数据框。执行我的整个代码块,看看它是否有效
  • 现在是Error in FUN(X[[i]], ...) : object 'm' not found
  • 您需要分组并计算平均值和标准差。见上面的代码
  • 它给了我两组整体的平均值。但是我希望 X 轴是每个类别的平均值,1-7,按组。
【解决方案2】:

这样的事情呢

`ggplot(df.df, aes(x=category, color=group)) + 
  stat_summary(aes(y = value),
             fun.y = mean, na.rm = TRUE,
             geom = "bar",
             size = 3) + 
stat_summary(aes(y = value),
           fun.data = mean_se, na.rm = TRUE,
           geom = "errorbar",
           width = 0.2) `

【讨论】:

  • 这给了我以下错误:Error in FUN(X[[i]], ...) : object 'value' not found
  • 那里的值就是你想要的平均值或标准错误
  • 这是与您的 df 库(tidyverse)一起运行的代码 df
猜你喜欢
  • 2021-04-08
  • 2012-11-17
  • 2020-08-24
  • 2018-08-06
  • 2012-12-04
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多