我正在尝试绘制堆积的条形图,以显示一列中每个组的相对百分比。
这是使用默认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] 删除。
我来说两句