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

R语言ggplot2绘图如何设置图例显示对应线条线型

问题说明

使用ggplot2绘制多系列折线图时,若线型参数未做美学映射,图例不会同步显示各系列对应的线型差异,当前效果如下:
当前绘图效果预览


问题根因

原代码中linetype作为固定参数写在aes()函数外部,没有和系列名称做绑定映射,ggplot2仅会将aes()内部声明的视觉属性同步到图例,因此图例中所有线条均显示为默认实线。


修复方案
  1. 将每个geom_line()层的linetype移入aes()内部,与color参数一样绑定到对应系列名
  2. 新增scale_linetype_manual()函数,统一配置每个系列对应的线型,保证图中线条与图例显示一致
  3. 在labs()中为线型图例设置与颜色图例相同的标题,让两个图例自动合并为一个,避免重复

修改后可直接运行的代码
library(ggplot2)
library(reshape2)

# 预定义各系列颜色
colors <- c("SK H" = "blue", "LV H" = "blue", "IE H" = "blue", 
            "SK M" = "red", "LV M" = "red", "IE M" = "red")
# 预定义各系列线型,与原代码设置完全对应
line_types <- c("SK H" = "twodash", "LV H" = "solid", "IE H" = "dotted",
                "SK M" = "twodash", "LV M" = "solid", "IE M" = "dotted")

p3 <- ggplot(EV, aes(x = Anos))
p3 + 
  geom_line(aes(y = SK.H, color = "SK H", linetype = "SK H"), size = 1.5) +
  geom_line(aes(y = LV.H, color = "LV H", linetype = "LV H"), size = 1.5) +
  geom_line(aes(y = IE.H, color = "IE H", linetype = "IE H"), size = 1.5) +
  geom_line(aes(y = SK.M, color = "SK M", linetype = "SK M"), size = 1.5) +
  geom_line(aes(y = LV.M, color = "LV M", linetype = "LV M"), size = 1.5) +
  geom_line(aes(y = IE.M, color = "IE M", linetype = "IE M"), size = 1.5) +
  ggtitle("EV between 2002 e 2019") +
  # 合并原代码中两个重复的主题设置
  theme(plot.title = element_text(hjust = 0.5, face = "bold")) +
  # 给color和linetype设置相同的图例名,触发自动合并
  labs(x = "Anos", y = "EV", color = "Legend", linetype = "Legend") +
  scale_color_manual(values = colors) +
  # 新增线型映射配置,让图例正确显示线型
  scale_linetype_manual(values = line_types)

注意事项
  • 原代码中LV H、LV M两个系列未手动指定线型,默认使用solid实线,上述代码中线型映射已对应匹配,不会改变原图的线条样式
  • 若后续需要调整线型,仅需修改line_types向量中的对应值即可,无需逐层修改geom_line()参数

内容的提问来源于stack exchange,提问作者CC-SAM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 21:12:19