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

R语言使用ggplot2绘制图表时如何添加自定义样式图例

解决方案

ggplot2的图例是基于*美学映射(aes()内定义的变量)*自动生成的,你当前的代码中将color、linetype参数定义在aes()外部,属于手动固定的图形属性常量,因此不会触发图例的自动生成。你只需要将这两个参数移入aes(),映射到你自定义的系列名称,再通过手动比例尺指定对应的实际样式即可。

修改后的完整代码如下:

prrgapuk <- ggplot() + 
  # 把color、linetype移入aes,值为你要在图例显示的系列名称,可自定义修改
  geom_line(aes(y=uk1, x= Date, color = "UK系列1", linetype = "UK系列1"), data = rrgap) +
  geom_line(aes(y=uk2, x= Date, color = "UK系列2", linetype = "UK系列2"), data = rrgap) +
  geom_line(aes(y=uk3, x= Date, color = "UK系列3", linetype = "UK系列3"), data = rrgap) +
  geom_line(aes(y=uk4, x= Date, color = "UK系列4", linetype = "UK系列4"), data = rrgap) +
  geom_line(aes(y=uk5, x= Date, color = "UK系列5", linetype = "UK系列5"), data = rrgap) +
  # 手动匹配你预设的颜色,values的命名要和aes里的系列名完全一致
  scale_color_manual(
    name = "图例标题", # 替换为你需要的实际图例标题
    values = c(
      "UK系列1" = "black",
      "UK系列2" = "blue",
      "UK系列3" = "red",
      "UK系列4" = "green",
      "UK系列5" = "purple"
    )
  ) +
  # 手动匹配你预设的线型,name和上方color的name保持一致,两个图例就会自动合并
  scale_linetype_manual(
    name = "图例标题",
    values = c(
      "UK系列1" = "solid",
      "UK系列2" = "dotdash",
      "UK系列3" = "dashed",
      "UK系列4" = "twodash",
      "UK系列5" = "longdash"
    )
  ) +
  theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(),
    panel.background = element_blank(), 
    axis.line = element_line(colour = "black")
  )

# 后续绘图逻辑保持不变
prrgapuk + 
  geom_hline(yintercept = 0, linetype="dotted") + 
  labs(y="") + 
  geom_rect(data = usrecessions.df, aes(xmin=Peak, xmax=Trough, ymin=-Inf, ymax=Inf), fill="grey", alpha=0.35) 

如果需要调整图例的位置、文字大小、边框等样式,可以在theme()中添加对应的图例参数设置,比如legend.position = "top"可以将图例放置在图表顶部,匹配你参考的示例样式。

可选优化方案:如果你的rrgap表是Date + uk1~uk5的宽表格式,可以先转为长表再绘图,代码更简洁、扩展性更强:

library(tidyverse)
# 宽表转长表
rrgap_long <- pivot_longer(rrgap, cols = starts_with("uk"), names_to = "系列", values_to = "数值")

prrgapuk <- ggplot(rrgap_long, aes(x = Date, y = 数值, color = 系列, linetype = 系列)) +
  geom_line() +
  # 后续的scale、theme设置和上述代码一致即可

后续新增系列不需要额外加geom_line层,直接调整比例尺映射即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:09:03