gglot plot scale_fill_hue():在比较具有较少类别的子组时,为相同的值保持相同的颜色

gglot plot scale_fill_hue(): keep same colours for same values when comparing a subgroup with fewer categories

我想比较两个条形图;一个代表整个人口,另一个是人口的一个子群。我非常喜欢 scale_fill_hue() 为此提供的颜色,但我 运行 遇到了问题。 我用于填充的因子有 6 个级别:20、50、100、200、500 和 N。在人口中,所有这六个级别都有代表,但在子组中,有零个人具有“20 ”。这导致 scale_fill_hue() 中的颜色发生偏移。图形代码在底部。

population graph

sample graph

这意味着红色,在我的人口图中代表“20”的颜色,在我的子组图中代表“50”。这很令人困惑,尤其是对于并排比较而言。此外,样本中 20 的零观测值仍然是我想要包含的重要信息!

有没有办法让 ggplot 包含“20”,即使没有任何观测值具有该值?或者我需要手动创建我的调色板吗?有没有人能给我一个方向?

ggplot(avmim, aes(x = as.factor(sizeg), fill = killrank)) + geom_bar(position = "fill") + theme(axis.text.x = element_text(angle=90, hjust=1))+
  labs(y="proportion", x="size group",fill="kill weight",title="Syrphid Size Group Kill Weight Proportions")+
  scale_x_discrete(labels = c("XXS","XS","S","L","XL","XXL"))+
  theme(axis.text.x  = element_text(angle=0, hjust=0.5))+
  scale_fill_discrete(name = "Kill Weight")
#scale_fill_discrete is leftover from when I was experimenting with ways to fix this

这是一个使用 mtcars 数据集的可重现示例。 expand_limits 通常用于 y 轴,但也可用于其他美学。这里曾经为任何可能存在 20 个齿轮的汽车在填充比例上留出空间。

library(ggplot2)
ggplot(mtcars, aes(x = cyl, group = gear, fill = gear)) + 
  geom_bar() +
  expand_limits(fill = 20)