You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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" # 让两个图例水平排列在一起
  )

改动说明:

  1. 映射loess的线型:在第一个stat_smooth里添加了aes(linetype = "loess"),这样ggplot会把这条线当作一个需要生成图例的分类项,而不是直接设置的样式。
  2. 定义线型样式:用scale_linetype_manual指定"loess"对应的线型为虚线(values=2),并设置图例名称为"loess"。
  3. 修正图例颜色:通过guides里的override.aes强制loess的图例显示为绿色(因为我们直接设置了线的颜色,但默认图例会用黑色,所以需要覆盖)。
  4. 调整布局:设置legend.box = "horizontal"让vs的颜色图例和loess的线型图例水平并排,正好显示在现有图例的右侧。

这样就能得到你想要的效果:绿色虚线的loess图例项会出现在现有vs图例的右边,样式完全符合要求。

内容的提问来源于stack exchange,提问作者jay.sf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:22:32