【问题标题】:Error: stat_summary requires the following missing aesthetics: y错误:stat_summary 需要以下缺失的美学:y
【发布时间】:2019-10-27 20:18:53
【问题描述】:

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

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

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。

我实际上是在尝试得到类似这样的东西,误差线代表置信区间。

【问题讨论】:

    标签: r ggplot2 bar-chart aesthetics


    【解决方案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)
    

    【讨论】:

    • 谢谢@pierre Gramme,但创建条形图不是问题。问题是当我尝试添加带有置信区间的误差线时。您的解决方案无助于修复 stat_summary 错误。
    • stat_summary 旨在使用一个分组变量和一个感兴趣的数值变量计算每组统计数据(例如,每个 Q1 的答案的平均年龄和 +-2 年龄标准)。在这种情况下,您只对分组变量的频率感兴趣。解决方案见上文
    • 谢谢!当我尝试按上述方式创建 df_stats 时,出现以下错误:Error in if (b &lt; 0) b &lt;- 0 : missing value where TRUE/FALSE needed
    • 奇怪。它适用于我编写的虚拟示例吗?
    • 不,运行你的例子给我Error: stat_count() must not be used with a y aesthetic.
    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 2021-09-16
    • 2019-07-15
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多