错误:stat_summary需要以下缺失的美感:y

时间:2019-10-27 20:18:53

标签: r ggplot2 bar-chart aesthetics

我正在尝试使用barplot创建一个具有置信区间误差线的ggplot。本质上,我有一个变量Q1,具有7个答案选项,并且我希望将每个选项的受访者百分比作为两个组(一个和两个)的因数绘制-每个组中主题的百分比选择了7个答案选项中的每个选项。

我尝试将y= count中的y=propy=..prop..aes添加到ggplot中,但这似乎都不起作用。任何建议表示赞赏。

df5 <- filter(df, Q1!="-99",df$Group=="One"|df$Group=="Two") 

ggplot(data = df5, aes(x = Q1)) + 
 stat_summary(fun.y = mean, geom = "bar") +
 stat_summary(fun.data = mean_cl_boot, geom = "errorbar", fun.args = list(mult = 1)) +
    geom_bar(aes(label= scales::percent(..prop..),
                   y= ..prop..,fill = df5$Group), position = "dodge")
  

错误:stat_summary需要以下美感:y。

我本质上是在尝试获得类似这样的东西,其中误差线代表置信区间。

example of barplot with error bars.

1 个答案:

答案 0 :(得分:1)

请注意,有一种更好的方法来编写您的第一选择:

df5 <- df %>% filter(Q1!="-99", Group %in% c("One", "Two"))

我建议您在制作图表之前明确计算统计信息。函数DescTools::MultinomCI()可以完成工作(参见文档)

# Reproducible example: random
library(tidyverse)
n <- 1000
df5 <- tibble(
    Q1 = sample(letters[1:7], n, replace=TRUE),
    Group = sample(c("One","Two"), n, replace=TRUE)
    )

library(DescTools)
df_stats <- df5 %>% 
    count(Group, Q1) %>% 
    group_by(Group) %>% 
    do({
        df_grp <- .
        df_grp %>% 
            select(Q1, n) %>%
            bind_cols(as_tibble(MultinomCI(df_grp$n))) %>% 
            rename(prop = est)
    })

如果要使用条形图:

df_stats %>% 
    ggplot(aes(Q1, y=prop, ymin=lwr.ci, ymax=upr.ci, fill=Group)) + 
    geom_col(position="dodge") + 
    geom_errorbar(position="dodge") + 
    ylim(0, NA)

(请注意,条形图的轴应始终从零开始,因此应使用ylim

但是,为了强调答案中的组间差异,折线图将更具可读性:

df_stats %>% 
    ggplot(aes(Q1, y=prop, ymin=lwr.ci, ymax=upr.ci, color=Group, group=Group)) + 
    geom_line() + 
    geom_errorbar(position="dodge", width=.2) + 
    ylim(0, NA)

resulting plot, using geom line