ggplot2绘制双变量折线图时颜色线宽不符合设定且图例多余如何解决
问题成因
ggplot2的视觉参数分为两类,写在aes()内部的属于变量映射,会被当做数据的分组维度处理,自动分配默认视觉属性并生成图例;只有写在aes()外部的参数才是为当前图层设置固定的视觉属性。
你提供的代码存在的错误:
- 第二个
geom_line的size=1、color="green"被错误写入了aes()内部,ggplot会将这两个固定值识别为分类变量,使用默认配色和线宽渲染,同时生成多余图例,最终表现就是颜色不符合设定、线宽异常、出现不需要的图例。 - 第一个
geom_line的aes()中y=HU_Q后存在多余逗号,虽不影响运行但属于不规范写法。
修复方案
直接将第二个geom_line的size和color参数移到aes()外部即可,修正后代码如下:
ggplot() + geom_line(test, mapping=aes(x=date, y=HU_Q), size=1, color="blue") + geom_line(test, mapping=aes(x=date, y=(SWI_Q*100)), size=1, color="green")
如果需要生成带对应变量标签的规范图例,更推荐将数据转换为长格式后绘图,示例代码如下:
library(tidyr) library(dplyr) test_long <- test %>% mutate(SWI_Q = SWI_Q * 100) %>% select(date, HU_Q, SWI_Q) %>% pivot_longer(cols = -date, names_to = "指标类型", values_to = "数值") ggplot(test_long, aes(x = date, y = 数值, color = 指标类型)) + geom_line(size = 1) + scale_color_manual(values = c("HU_Q" = "blue", "SWI_Q" = "green"))
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

