ggplot分组条形图,显示百分比为第二个变量的总和

时间:2017-10-27 16:30:29

标签: r ggplot2

我试图在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)

Bar Graph with Percentages

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

我一直在搜索,我只能找到如何获得x轴上每个值的总百分比或百分比。提前感谢您提供任何帮助。

1 个答案:

答案 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())

enter image description here

按填充分组:

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())

enter image description here