【问题标题】:ggplot Grouped Bar Graph, Show Percentages as Total of Second Variableggplot 分组条形图,将百分比显示为第二个变量的总数
【发布时间】:2017-10-27 16:30:28
【问题描述】:

我试图在 R 中制作一个分组条形图,其中 y 轴上的百分比,但我希望这些百分比是分组变量的百分比,而不是 x 轴上的变量。我进一步解释:

使用此代码,我可以制作以下条形图:

ggplot(data=test, aes(cat1))+
  geom_bar(aes(fill=as.factor(cat2), y = (..count..)/sum(..count..)), position="dodge") + 
  scale_y_continuous(labels=percent)

此图表未显示我想要的百分比。这里的百分比是总数。我也不想要一个比例堆积条形图,其中每个 cat1 值的条形为 100%。我想要的是一个分组条形图,其中每个 cat2 值的 5 个条形加起来为 100%。所以在上面链接的图像中,我希望所有红色条添加到 100%,所有蓝色条添加到 100%,所有绿色条添加到 100%。我想要做的是显示每个 cat2 值在每个 cat1 值中的百分比。

我已经搜索了所有内容,但我只能找到如何获取总百分比或 x 轴上每个值的百分比。提前感谢您提供的任何帮助。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是一种方法

    首先是一些数据:

    set.seed(1)
    df = data.frame(cat1 = sample(1:3, 300, c(0.2, 0.3, 0.5), replace = T),
                    cat2 = sample(1:3, 300, c(0.3, 0.3, 0.4), replace = T))
    

    带有生成数据的示例图:

    ggplot(data=df, aes(cat1))+
      geom_bar(aes(fill=as.factor(cat2), y = (..count..)/sum(..count..)), position="dodge") + 
      scale_y_continuous(labels=scales::percent_format())
    

    按填充分组:

    library(tidyverse)
    df %>%
      group_by(cat2, cat1) %>% #group by both variables
      summarise(n = n()) %>% #count members per group
      group_by(cat2) %>% #group just by the fill variable
      mutate(y = n/sum(n)) %>% #percent of each cat1 n per cat2 group
      ggplot()+
      geom_col(aes(y=y, x = cat1, fill = as.factor(cat2)), position="dodge")+
      scale_y_continuous(labels=scales::percent_format())
    

    【讨论】:

    • 这正是我想要的。我不能感谢你。我也支持你,但它不会显示,因为我没有足够的声誉。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 2020-04-18
    • 1970-01-01
    • 2019-09-05
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多