如何在ggplot2图例中添加loess拟合线?
我来帮你搞定这个图例问题!核心是要让ggplot把你的loess线识别成一个需要图例的元素,而不是直接硬编码的样式。这里是调整后的代码,完全符合你的需求:
library(ggplot2) ggplot(mtcars, aes(wt, mpg, color=as.factor(vs), group=as.factor(vs))) + # 关键:把linetype映射到"loess"常量,同时保持线为绿色 stat_smooth(method="loess", se=FALSE, color="green", aes(linetype = "loess"), show.legend=TRUE) + stat_smooth(method="lm", formula=y ~ poly(x, 2, raw=TRUE), se=FALSE, show.legend=TRUE)+ theme_minimal()+ # 定义loess的线型为虚线,设置图例名称 scale_linetype_manual(name = "loess", values = 2) + # 调整图例显示:让颜色和线型图例水平并排,确保loess图例显示绿色 guides( color = guide_legend(direction = "horizontal", title = "vs"), linetype = guide_legend(direction = "horizontal", override.aes = list(color = "green")) ) + theme( legend.position = c(0, 1), legend.justification = c("left", "top"), legend.box.just = "right", legend.box = "horizontal" # 让两个图例水平排列在一起 )
改动说明:
- 映射loess的线型:在第一个
stat_smooth里添加了aes(linetype = "loess"),这样ggplot会把这条线当作一个需要生成图例的分类项,而不是直接设置的样式。 - 定义线型样式:用
scale_linetype_manual指定"loess"对应的线型为虚线(values=2),并设置图例名称为"loess"。 - 修正图例颜色:通过
guides里的override.aes强制loess的图例显示为绿色(因为我们直接设置了线的颜色,但默认图例会用黑色,所以需要覆盖)。 - 调整布局:设置
legend.box = "horizontal"让vs的颜色图例和loess的线型图例水平并排,正好显示在现有图例的右侧。
这样就能得到你想要的效果:绿色虚线的loess图例项会出现在现有vs图例的右边,样式完全符合要求。
内容的提问来源于stack exchange,提问作者jay.sf
相关产品推荐
相关产品推荐

