ggplot使用scale_fill_hue()对比子组时固定相同值配色的实现方案
解决方案
方法1:固定因子水平+禁用分类丢弃(推荐)
可以完全保留scale_fill_hue的原生配色,同时正常展示无观测分类的0值信息:
- 提前将填充映射的
killrank转换为固定水平的因子,把所有可能的取值都列在levels参数里,全量和子组数据集都执行这一步统一因子水平:
avmim$killrank <- factor(avmim$killrank, levels = c("20", "50", "100", "200", "500", "N"))
- 在填充比例尺的函数里添加
drop = FALSE参数,要求ggplot保留所有因子水平,不要丢弃无观测的分类,修改后的完整代码如下:
ggplot(avmim, aes(x = as.factor(sizeg), fill = killrank)) + geom_bar(position = "fill") + 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_hue(name = "Kill Weight", drop = FALSE)
方法2:手动生成固定配色映射
如果不需要在子组图例里展示无观测的分类,仅需要配色和全量图对齐,可以提前生成和scale_fill_hue效果一致的固定颜色映射:
# 加载scales包生成原生hue配色 library(scales) killrank_colors <- setNames(hue_pal()(6), c("20", "50", "100", "200", "500", "N")) # 绘图时调用手动配色即可 ggplot(avmim, aes(x = as.factor(sizeg), fill = killrank)) + geom_bar(position = "fill") + 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_manual(values = killrank_colors, name = "Kill Weight")
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

