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

如何在R ggplot中为两组线条设置不同调色板?

解决ggplot中原始折线与loess平滑线配色重叠的问题

报错原因

你直接在geom_smooth()的aes()中传入长度为2的颜色向量,但数据集有62行数据。ggplot要求美学映射的向量长度要么为1,要么与数据行数完全一致,因此触发报错。

解决方案

方案一:给平滑线设置统一固定颜色

最简单的方式是让所有平滑线使用同一种对比色(比如黑色),原始折线保留分组配色,通过颜色差异区分两类线条:

data %>% 
  ggplot(aes(x = as.Date(Date), y = value, color = temp)) +
  geom_line(linewidth = 0.1) + 
  # 直接设置color参数(不放在aes()内),所有平滑线用黑色
  geom_smooth(method = 'loess', span = 0.2, color = "black", linewidth = 0.8) +
  theme_classic()

方案二:自定义调色板+调整线条样式

如果希望分组的折线与平滑线颜色对应,但通过线条粗细、透明度区分,可使用scale_color_manual()自定义分组颜色,同时调平滑线的线条宽度:

data %>% 
  ggplot(aes(x = as.Date(Date), y = value, color = temp)) +
  geom_line(linewidth = 0.1, alpha = 0.6) + 
  geom_smooth(method = 'loess', span = 0.2, linewidth = 1) +
  # 自定义对比强烈的分组配色
  scale_color_manual(values = c("最高气温" = "#2c3e50", "最低气温" = "#e74c3c")) +
  theme_classic()

这里将折线设为半透明,平滑线加粗,即使颜色对应也能清晰区分。

方案三:给折线与平滑线分配不同配色组

如果需要折线与平滑线使用完全不同的配色,可拆分美学映射:

data %>% 
  ggplot(aes(x = as.Date(Date), y = value)) +
  # 原始折线用color映射分组
  geom_line(aes(color = temp), linewidth = 0.1) + 
  # 平滑线按分组拟合,使用独立的颜色标识
  geom_smooth(aes(group = temp, color = paste0(temp, "_smooth")), 
              method = 'loess', span = 0.2, linewidth = 0.8) +
  # 自定义所有元素的颜色
  scale_color_manual(values = c(
    "最高气温" = "#3498db", 
    "最低气温" = "#9b59b6",
    "最高气温_smooth" = "#2980b9", 
    "最低气温_smooth" = "#8e44ad"
  )) +
  # 可选:调整图例样式,匹配线条粗细
  guides(color = guide_legend(override.aes = list(
    linewidth = c(0.1, 0.1, 0.8, 0.8)
  ))) +
  theme_classic()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 09:18:32