ggplot:使用facet_wrap时的百分比

问题描述

我有以下示例数据集:

library(tidyverse)

df <- data.frame(var1 = c("A","B","A","C","A"),var2 = c("B","C"),var3 = c("A","A"))

现在,我想将三个变量绘制成条形图并排放置:

# Absolute values
df %>% pivot_longer(cols=c(var1,var2,var3)) %>%
  ggplot(aes(value)) + geom_bar(fill='lightblue',color='black')  + facet_wrap(.~ name) + coord_flip()

当我需要绝对数字时,我可以轻松地做到这一点。但是我不知道如何分别获取每个变量(var1,var2,var3)的百分比,这样每个条形图的值总计为100%。

在以下图表中,所有三个图表的条形图加起来总计为100%。

# Percentages (not what I want)
df %>% pivot_longer(cols=c(var1,var3)) %>%
  ggplot(aes(value)) + geom_bar(aes(y = (..count..)/sum(..count..)*100),fill='lightblue',color='black')  +facet_wrap(.~name) + coord_flip()

有人知道该怎么做吗?

解决方法

也许这样?

df %>% 
  pivot_longer(cols = c(var1,var2,var3)) %>%
  count(name,value) %>%
  group_by(name) %>%
  mutate(prop = n/sum(n)) %>%
  ggplot(aes(x = value,y = prop)) + 
  geom_col(fill = 'lightblue',color = 'black')  + 
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(.~ name) + 
  coord_flip()

enter image description here