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

如何为ggplot温度时间序列图添加月份背景网格?

问题描述

我有如下月度温度数据集:

temperature <- data.frame(
  stringsAsFactors = FALSE,
  Year= c(1998,1998,1998,1998,1998,1998,1998,1998,1998,1998,1998,1998,1999,1999,1999,1999,1999,1999,1999,1999,1999,1999,1999,1999,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2000,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2001,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002,2002),
  Month = c(1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12,1,2,3,4,5,6,7,8,9,10,11,12),
  Temperature = c(5,6,7,12,15,16,27,28,22,10,11,6,6,6,7,13,16,15,25,26,24,12,11,4,5,6,7,12,15,17,28,30,22,10,11,7,7,7,7,12,18,17,25,24,20,3,3,4,5,6,7,12,15,16,27,28,22,10,11,6),
  check.names = FALSE
)

我想用ggplot绘制时间序列图,仅在y轴显示温度,已写了如下代码:

temperature$date = as.Date(paste(temperature$Year, temperature$Month,1), format = "%Y %m %d")

ggplot(temperature,
       aes(
         x = date,
         y = Temperature
        )) +
  geom_line() +
  ggtitle("Time series") +
  xlab("Year") +
  ylab("Temperature")

但当前图表无法在网格中区分月份,显示效果很差,该如何修改代码解决?

解决方案

可以通过优化x轴刻度、添加精细网格线或调整标签展示方式,提升图表的可读性,以下是几种实用修改方案:

方案1:优化x轴刻度与网格线

借助scales包自定义日期刻度,添加对应月份的次要网格线,让时间分界更清晰:

library(ggplot2)
library(scales)

temperature$date = as.Date(paste(temperature$Year, temperature$Month,1), format = "%Y %m %d")

ggplot(temperature, aes(x = date, y = Temperature)) +
  geom_line(color = "#2c3e50", linewidth = 1) +
  # 设置x轴主刻度为每年1月,次要刻度为每月1日
  scale_x_date(
    breaks = date_breaks("1 year"),
    minor_breaks = date_breaks("1 month"),
    labels = date_format("%Y")
  ) +
  # 区分主次网格线,提升月份辨识度
  theme_bw() +
  theme(
    panel.grid.major.x = element_line(color = "#bdc3c7", linetype = "solid"),
    panel.grid.minor.x = element_line(color = "#ecf0f1", linetype = "dashed"),
    panel.grid.major.y = element_line(color = "#bdc3c7"),
    plot.title = element_text(hjust = 0.5)
  ) +
  ggtitle("月度温度时间序列") +
  xlab("年份") +
  ylab("温度")

方案2:直接标注年月标签

如果希望直观看到具体年月,可调整x轴标签的间隔和格式,避免重叠:

ggplot(temperature, aes(x = date, y = Temperature)) +
  geom_line(color = "#2c3e50", linewidth = 1) +
  scale_x_date(
    breaks = date_breaks("3 months"),
    labels = date_format("%Y-%m")
  ) +
  theme_bw() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5)
  ) +
  ggtitle("月度温度时间序列") +
  xlab("年月") +
  ylab("温度")

方案3:按年份分面对比趋势

若想清晰对比每年的月度温度变化,可使用分面展示:

ggplot(temperature, aes(x = factor(Month), y = Temperature, group = Year, color = factor(Year))) +
  geom_line(linewidth = 1) +
  scale_x_discrete(labels = c("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月")) +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5)) +
  labs(title = "各年度月度温度对比", x = "月份", y = "温度", color = "年份")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:18:12