首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将百分比限制在每个单独的方面,而不是跨多个方面?

如何将百分比限制在每个单独的方面,而不是跨多个方面?
EN

Stack Overflow用户
提问于 2021-01-08 02:25:03
回答 1查看 54关注 0票数 1

我是R的新手,所以我的代码可能不会尽可能的高效。

每个方面代表一个不同的研讨会。研讨会的参与者对研讨会进行评分。当前,每个评级的百分比(例如,“有帮助”、“无帮助”等)对于每个研讨会,都以百分比的形式计算整个研讨会。换句话说,图表显示,在所有四个研讨会中,约有16%的受访者认为“管理你的非营利组织”研讨会“非常有帮助”。

但是,我需要它将评级限制在单个研讨会上(即,图表应显示参加“管理您的非营利组织”研讨会的100%受访者将其评为“非常有帮助”。

下面是我的代码。我认为问题可能出在geom_bar(aes(y=(..count..)/sum(..count..))上,但我不确定。在我现有的方法中创建我想要的图形的最干净的方法是什么?

代码语言:javascript
运行
复制
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

下面是生成的图表:

EN

回答 1

Stack Overflow用户

发布于 2021-01-08 02:52:38

正如@stefan评论的那样,您可以在ggplot之外汇总数据,然后绘制计算出的百分比。一般来说,这将为您提供最大的灵活性(请参阅此答案末尾的示例)。

要在ggplot中执行所有操作,可以使用内部计算的变量..prop..来计算百分比。我们还需要将group美学设置为按刻面变量分组,以确保在每个面板中计算百分比,而不是跨所有面板计算百分比。

下面是一个使用内置mtcars数据框架的示例。我们按列vs进行分面,因此我们在geom_bar中使用group=vs来确保在每个vs分面中计算百分比:

代码语言:javascript
运行
复制
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()

如果你想要预先汇总数据,你可以这样做:

代码语言:javascript
运行
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65617966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档