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

如何为ggplot2绘制的观测值与预测值对比图添加图例

图例不显示的核心原因

ggplot2 仅会对放在aes()内部做映射的视觉属性(颜色、填充、线型等)自动生成图例。你当前代码直接在aes()外部给几何对象指定固定颜色、填充值,这类硬编码的视觉属性不会被纳入图例映射规则,因此不会显示图例。

修改后可直接运行的代码
grafico = ggplot(data=pd,aes(x=date)) + 
  # 真实观测值:将颜色属性移入aes做命名映射
  geom_line(aes(y = data, col = "真实观测值")) + 
  # 点预测值:将颜色属性移入aes做命名映射
  geom_line(aes(y = `Point Forecast`, col = "点预测值")) + 
  # 95%置信区间:将填充属性移入aes做命名映射
  geom_ribbon(aes(ymin = `Lo 95`, ymax = `Hi 95`, fill = "95%置信区间"), alpha = .25) + 
  scale_x_date(name = '时间周期', expand = c(0,0)) +
  scale_y_continuous(name = 'Male kt') +
  # 手动指定线条配色,和原本的黑、红配色保持一致
  scale_color_manual(
    name = "序列类型",
    values = c(
      "真实观测值" = "black",
      "点预测值" = "red"
    )
  ) +
  # 手动指定置信区间填充色
  scale_fill_manual(
    name = "区间类型",
    values = c(
      "95%置信区间" = "grey40"
    )
  ) +
  ggtitle("Male kts - 观测值与预测值对比") +
  theme(plot.title = element_text(hjust = 0.5))

# 输出图表
grafico
补充调整说明
  • 你数据集中前131条记录的预测列、置信区间列均为NA值是预测结果存储的正常设计,ggplot2会自动忽略NA值对应的绘图元素,不会出现绘图错误。
  • 如果需要保留原英文图例文字,只需要把aes()里映射的中文字符串、scale_*函数里的名称、标签替换成对应英文即可,比如把"真实观测值"换成"Observed values"。
  • 如果想要把线条图例和填充图例合并为一个,只需要把scale_color_manual和scale_fill_manual的name参数设置为完全相同的字符串即可。
  • 如果需要调整图例位置,可以在theme()中添加legend.position参数,比如传入"bottom"即可将图例放在图表底部,传入c(0.9,0.8)可以自定义图例在绘图区域的相对位置。

内容的提问来源于stack exchange,提问作者Rods2292

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:24:30