如何设置2个及以上scale_linetype_manual实现多组折线独立图例
你碰到报错的核心原因是原生ggplot2中,同一种美学映射(比如linetype线型)只能绑定一个scale规则,重复定义scale_linetype_manual的话,后定义的会尝试覆盖前者,就会抛出冲突报错。
如果要实现两组不同类别的折线各有独立的线型图例,可以用两种方案实现:
- 最便捷的方案是借助
ggnewscale包开辟独立的美学映射通道,使用逻辑如下:
library(ggplot2) library(ggnewscale) ggplot() + # 绘制第一组折线,配置对应线型规则 geom_line(data = 第一组数据集, aes(x = x轴字段, y = y轴字段, linetype = 第一组分组字段)) + scale_linetype_manual(values = c("solid", "dashed"), name = "第一组图例标题") + # 新增独立的线型映射通道 new_scale("linetype") + # 绘制第二组折线,配置独立线型规则 geom_line(data = 第二组数据集, aes(x = x轴字段, y = y轴字段, linetype = 第二组分组字段)) + scale_linetype_manual(values = c("dotted", "dotdash"), name = "第二组图例标题")
- 不想引入额外依赖的话,可以把两组的分组字段合并为一个交叉分组变量,配置统一的
scale_linetype_manual后,再通过guide_legend手动拆分出两个视觉独立的图例,只是需要手动调整图例的标签、顺序,操作复杂度更高。
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

