我是R的新手,所以我的代码可能不会尽可能的高效。
每个方面代表一个不同的研讨会。研讨会的参与者对研讨会进行评分。当前,每个评级的百分比(例如,“有帮助”、“无帮助”等)对于每个研讨会,都以百分比的形式计算整个研讨会。换句话说,图表显示,在所有四个研讨会中,约有16%的受访者认为“管理你的非营利组织”研讨会“非常有帮助”。
但是,我需要它将评级限制在单个研讨会上(即,图表应显示参加“管理您的非营利组织”研讨会的100%受访者将其评为“非常有帮助”。
下面是我的代码。我认为问题可能出在geom_bar(aes(y=(..count..)/sum(..count..))上,但我不确定。在我现有的方法中创建我想要的图形的最干净的方法是什么?
webinar_rating_graph <- response_master_df %>%
ggplot(aes(x=`How would you rate the content of the webinar?`)) +
facet_grid(cols=vars(str_wrap(Webinar, 15))) +
geom_bar(aes(y=(..count..)/sum(..count..)),
fill="skyblue", color="black") +
labs(title="Ratings of Webinars as Percentage of Respondants", y="Percentage of Respondants") +
theme(
plot.title = element_text(hjust = 0.5, size=12),
strip.text=element_text(hjust=.5, size=8),
axis.text=element_text(hjust=.5, size=5),
axis.title=element_text(size=8)) +
scale_y_continuous(labels=scales::percent) +
scale_x_discrete(
labels=scales::wrap_format(4),
limits = c("Very Helpful", "Somewhat Helpful",
"Neither Helpful nor Unhelpful",
"Somewhat Unhelpful", "Very Unhelpful"))
webinar_rating_graph下面是生成的图表:

发布于 2021-01-08 02:52:38
正如@stefan评论的那样,您可以在ggplot之外汇总数据,然后绘制计算出的百分比。一般来说,这将为您提供最大的灵活性(请参阅此答案末尾的示例)。
要在ggplot中执行所有操作,可以使用内部计算的变量..prop..来计算百分比。我们还需要将group美学设置为按刻面变量分组,以确保在每个面板中计算百分比,而不是跨所有面板计算百分比。
下面是一个使用内置mtcars数据框架的示例。我们按列vs进行分面,因此我们在geom_bar中使用group=vs来确保在每个vs分面中计算百分比:
library(tidyverse)
mtcars %>%
ggplot(aes(factor(cyl))) +
geom_bar(aes(y=..prop.., group=vs)) +
facet_grid(cols=vars(vs)) +
scale_y_continuous(label=scales::percent, limits=c(0,1), expand=c(0,0)) +
theme_bw()

如果你想要预先汇总数据,你可以这样做:
mtcars %>%
# Get counts of each group
group_by(vs, cyl) %>%
tally %>%
# Get percent within each level of vs
group_by(vs) %>%
mutate(pct = n/sum(n)) %>%
ggplot(aes(cyl, pct)) +
geom_col() +
facet_grid(cols=vars(vs)) +
scale_y_continuous(label=scales::percent, limits=c(0,1), expand=c(0,0)) +
theme_bw()https://stackoverflow.com/questions/65617966
复制相似问题