我试图根据类别的计数(或比例)更改(堆叠的)条形宽度,例如,我使用了钻石数据集。我想根据每个类别(变量cut)的频率来改变宽度。我首先创建了一个变量cut_prop,然后使用以下代码进行绘制

library(tidyverse)

cut_prop = diamonds %>%
  group_by(cut) %>%
  summarise(cut_prop = n()/nrow(diamonds))

diamonds = left_join(diamonds, cut_prop)

ggplot(data = diamonds,
       aes(x = cut, fill = color)) +
  geom_bar(aes(width=cut_prop), position = "fill") +
  theme_minimal() +
  coord_flip()

这给了我下面的图:

r - 根据ggplot2中类别的比例调整(堆叠)条形宽度-LMLPHP

R给出一个警告,告诉您:Ignoring unknown aesthetics: width,显然没有考虑到条形宽度类别的比例,有人可以在这里帮助我吗?谢谢!

最佳答案

我认为这可行。从您离开的地方开始...

df <- diamonds %>%
  count(cut, color, cut_prop) %>%
  group_by(cut) %>%
  mutate(freq = n / sum(n)) %>%
  ungroup

ggplot(data = df,
       aes(x = cut, fill = color, y = freq, width = cut_prop)) +
  geom_bar(stat = "identity") +
  theme_minimal() +
  coord_flip()

r - 根据ggplot2中类别的比例调整(堆叠)条形宽度-LMLPHP

本质上,我自己计算比例而不是使用position = "fill",然后使用stat = identity而不是stat = count

07-28 02:14
查看更多