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

ggplot绘制GDP与移动平均线时颜色及顺序异常问题排查

问题原因与解决方案

问题根源

你把colour参数放在了aes()函数内部,这会让ggplot将"black""red"视为分类变量的标签,而非直接使用的颜色值。ggplot会自动调用默认调色板为这些标签分配颜色,所以不会遵循你指定的颜色设定。

解决方法1:直接指定颜色(无需图例)

把colour移出aes(),直接作为geom_line()的参数,这样就是直接设置线条颜色,而非变量映射:

# 确保已加载依赖包
library(zoo)
library(ggplot2)
library(dplyr)

graf <- data %>% ggplot(aes(x = TRIMESTRE)) +
  geom_line(aes(y = PIB), colour = "black") +
  geom_line(aes(y = rollmean(PIB, 6, na.pad = TRUE)), colour = "red")
graf

解决方法2:规范长数据格式(带图例)

如果需要显示图例区分两条线,推荐先将数据转换为ggplot偏好的长格式,再通过颜色映射+手动指定颜色实现:

library(zoo)
library(ggplot2)
library(dplyr)
library(tidyr)

# 1. 提前计算移动平均线,新增列到数据框
data <- data %>%
  mutate(PIB_移动平均 = rollmean(PIB, 6, na.pad = TRUE))

# 2. 转换为长格式
data_long <- data %>%
  pivot_longer(
    cols = c(PIB, PIB_移动平均),
    names_to = "指标类型",
    values_to = "数值"
  )

# 3. 绘图并指定颜色
graf <- data_long %>%
  ggplot(aes(x = TRIMESTRE, y = 数值, colour = 指标类型)) +
  geom_line() +
  scale_colour_manual(
    values = c("PIB" = "black", "PIB_移动平均" = "red")
  )
graf

额外注意

  • 确保已加载zoo包,rollmean函数属于该包,未加载会触发报错。
  • 若na.pad = TRUE导致开头出现NA值,可以考虑改用rollmeanr(右侧对齐)或调整fill参数处理缺失值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:50:25