ggplot2中结合aes(colour=变量)使用viridis自定义配色的方法
问题根源
配色不生效不是参数冲突,是混淆了ggplot2的两个独立美学映射通道:
colour:负责控制线条、点轮廓、文本等线状/轮廓类元素的颜色fill:负责控制条形、多边形、平滑置信区间填充等面状元素的填充色
你的代码中仅给平滑线映射了colour = gender,但调用的scale_fill_viridis()仅作用于fill通道,完全不会修改线条的配色规则,因此线条始终使用ggplot2默认调色板。
修复方案
将scale_fill_viridis()替换为对应colour通道的viridis标度函数scale_colour_viridis()即可。由于gender是离散分类变量,需要显式指定discrete = TRUE避免函数按连续值解析映射。
修正后的可运行代码:
ggplot(combi_plot, aes(x = day_of_symptoms, y = ct_value)) + geom_smooth(aes(colour = gender)) + xlim(-5, 20) + scale_colour_viridis(discrete = TRUE)
补充说明
- 如果后续绘图同时映射了
colour和fill两个通道、需要统一应用viridis配色,同时添加scale_colour_viridis()和scale_fill_viridis()两个标度即可,两个函数支持相同的参数:比如用option = "plasma"/"magma"等切换viridis系列的不同配色变体,用direction = -1翻转配色顺序。 geom_smooth默认生成的平滑线附带的置信区间阴影受fill通道控制,如果需要给置信区间也按性别映射填充色,可以在aes()里同时加fill = gender,搭配scale_fill_viridis(discrete = TRUE)就能让线条和对应置信区间的填充色匹配。
内容的提问来源于stack exchange,提问作者Milan Post
相关产品推荐
相关产品推荐

