我试图在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%。我想要做的是显示每个cat1值中每个cat2值的百分比。
我一直在搜索,我只能找到如何获得x轴上每个值的总百分比或百分比。提前感谢您提供任何帮助。
答案 0 :(得分:0)
这是一种方法
首先是一些数据:
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())