Error: stat_summary requires the following missing aesthetics: y
Error: stat_summary requires the following missing aesthetics: y
我正在尝试使用 ggplot
创建一个带有置信区间误差线的 barplot
。本质上,我有一个变量 Q1
,有 7 个答案选项,我想绘制每个选项的受访者百分比,作为两组(一和二)的一个因素 - 每组中受试者的百分比选择了 7 个答案选项中的每一个。
我尝试将 y= count
、y=prop
或 y=..prop..
添加到 ggplot
中的 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")
Error: stat_summary requires the following missing aesthetics: y.
我实际上是在尝试获得类似这样的东西,误差线代表置信区间。
请注意,有更好的方式来编写您的第一个选择:
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)
我正在尝试使用 ggplot
创建一个带有置信区间误差线的 barplot
。本质上,我有一个变量 Q1
,有 7 个答案选项,我想绘制每个选项的受访者百分比,作为两组(一和二)的一个因素 - 每组中受试者的百分比选择了 7 个答案选项中的每一个。
我尝试将 y= count
、y=prop
或 y=..prop..
添加到 ggplot
中的 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")
Error: stat_summary requires the following missing aesthetics: y.
我实际上是在尝试获得类似这样的东西,误差线代表置信区间。
请注意,有更好的方式来编写您的第一个选择:
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)