ggplot绘制多系列折线图时两种线型无法在图例同时显示问题
问题解决方法
你遇到的问题核心是linetype参数写在了aes()外部,属于全局固定参数,不会被ggplot纳入图例映射逻辑,按照如下方式修改代码即可实现需求:
library(ggplot2) library(forcats) p <- ggplot(BD_sal, aes(Year)) + # 盐度对应实线,将linetype映射为自定义标签 geom_line(aes(y = Salinity, colour = Zone, linetype = "盐度")) + # 径流量等级对应虚线,将linetype映射为自定义标签 geom_line(aes(y = as.numeric(fct_rev(as.factor(Level)))*5, colour = Zone, linetype = "径流量等级")) + scale_y_continuous( name = "盐度 (ppt)", sec.axis = sec_axis(~./5, name="径流量等级")) + # 手动指定线型与自定义标签的对应关系 scale_linetype_manual( name = "指标类型", values = c("盐度" = "solid", "径流量等级" = "dashed") ) + theme_classic() p
实现效果说明
修改后会生成关联的两个图例:
- 颜色图例展示Zone B、Zone D对应的线条颜色
- 线型图例展示实线对应盐度、虚线对应径流量等级
ggplot会自动将两个美学映射的效果结合展示,最终呈现的图例完全符合预期:同一个Zone的颜色下,实线对应盐度数值,虚线对应径流量等级数值。
内容的提问来源于stack exchange,提问作者Johnny5ish
相关产品推荐
相关产品推荐

