在堆积的条形图上按列显示百分比

克劳斯式

我正在尝试绘制堆积的条形图,以显示一列中每个组的相对百分比。

这是使用默认mpg数据集的我的问题的说明:

mpg %>%
  ggplot(aes(x=manufacturer, group=class)) +
  geom_bar(aes(fill=class), stat="count") +
  geom_text(aes(label=scales::percent(..prop..)),
    stat="count",
    position=position_stack(vjust=0.5))

这是输出: 在此处输入图片说明

我的问题是,此输出显示每个类别相对于总计的百分比,而不是每个制造商内部的相对百分比

例如,我希望第一列(audi)显示棕色(紧凑)为83.3%(15/18),绿色(中型)显示16.6%(3/18)。

我在这里发现了一个类似的问题:如何在ggplot2中绘制显示基于组百分比的堆积条形图?

但是我想知道在ggplot2中是否有一种更简单的方法,尤其是因为我的实际数据集使用一堆dplyr管道按摩数据之后才最终将其输送到ggplot2中。

编码器

如果我将您的问题与您提供的链接进行比较,则不同之处在于该链接“算”了他们自己。那就是我所做的。我不确定这是否适合您的真实数据。

library(ggplot2)
library(dplyr)

mpg %>%
  mutate(manufacturer = as.factor(manufacturer),
         class = as.factor(class)) %>%
  group_by(manufacturer, class) %>%
  summarise(count_class = n()) %>%
  group_by(manufacturer) %>%
  mutate(count_man = sum(count_class)) %>%
  mutate(percent = count_class / count_man * 100) %>%
  ggplot() +
  geom_bar(aes(x = manufacturer,
               y = count_man, 
               group = class,
               fill = class), 
           stat = "identity") +
  geom_text(aes(x = manufacturer,
                y = count_man,
                label = sprintf("%0.1f%%", percent)),
            position = position_stack(vjust = 0.5))

根据评论进行编辑:

我为错误的列选择了错误 y

library(ggplot2)
library(dplyr)

mpg %>%
  mutate(manufacturer = as.factor(manufacturer),
         class = as.factor(class)) %>%
  group_by(manufacturer, class) %>%
  summarise(count_class = n()) %>%
  group_by(manufacturer) %>%
  mutate(count_man = sum(count_class)) %>%
  mutate(percent = count_class / count_man * 100) %>%
  ungroup() %>%
  ggplot(aes(x = manufacturer,
             y = count_class,
             group = class)) +
  geom_bar(aes(fill = class), 
           stat = "identity") +
  geom_text(aes(label = sprintf("%0.1f%%", percent)),
            position = position_stack(vjust = 0.5))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章