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

如何用ggplot2调整时间序列X轴,聚焦7-12月数据?

解决ggplot时间序列仅展示7-12月的问题

核心思路

先筛选出7-12月的数据,再调整x轴的显示范围与刻度,确保只展示目标月份区间。

步骤1:数据预处理(筛选目标月份)

首先确保Date列是标准日期格式,提取年、月、日信息后,筛选出月份≥7的记录,再生成统一年份的datetime列(用于对齐不同年份的同月同日)。

步骤2:调整x轴显示

通过scale_x_datetime设置x轴的范围、刻度与标签,或者用coord_cartesian仅放大目标区域(不删除数据)。

修改后的完整代码

library(tidyverse)
library(lubridate)

cbPalette <- c("#000000", "#ff9208", "#2adfff", "#00d202", "#ffec16", "#f40300", "#384aff", "#8f0066")

p <- df %>% 
  # 转换Date为日期格式,提取年、月、日
  mutate(Date = ymd(Date),
         year = year(Date),
         month = month(Date),
         day = day(Date)) %>%
  # 筛选7-12月的数据
  filter(month >= 7) %>%
  # 生成统一2017年的datetime,用于对齐不同年份的日期
  mutate(datetime = make_datetime(2017, month, day)) %>%
  
  ggplot() +
  geom_line(aes(x = datetime, y = values, color = factor(year)), lwd = 1) +
  # 设置x轴刻度为7-12月,标签为月份缩写
  scale_x_datetime(breaks = make_datetime(2017, 7:12),
                   labels = month.abb[7:12],
                   # 限制x轴范围为7月1日至12月31日
                   limits = c(make_datetime(2017, 7, 1), make_datetime(2017, 12, 31))) +
  scale_colour_manual(values = cbPalette) +

  labs(colour = "Year", x = "Date", y = "Number of water pixels") +
  theme_bw() +
  theme(axis.text = element_text(size = 12),
        axis.title = element_text(size = 15)) +
  theme(axis.title.x = element_text(vjust = -0.8),
        axis.title.y = element_text(vjust = 3),
        axis.text.y = element_text(angle = 90, vjust = 1.5, hjust = 0.5)) +
  theme(legend.title = element_text(size = 15),
        legend.text = element_text(size = 12))

p

备选方案(仅放大区域,保留全部数据)

如果需要保留1-6月的数据但只展示7-12月的视图,可替换scale_x_datetime的limits参数为coord_cartesian:

ggplot() +
  geom_line(aes(x = datetime, y = values, color = factor(year)), lwd = 1) +
  scale_x_datetime(breaks = make_datetime(2017, 7:12), labels = month.abb[7:12]) +
  # 仅放大7-12月区域,不删除数据
  coord_cartesian(xlim = c(make_datetime(2017, 7, 1), make_datetime(2017, 12, 31))) +
  scale_colour_manual(values = cbPalette) +
  # 其他主题与标签设置不变
  labs(colour = "Year", x = "Date", y = "Number of water pixels") +
  theme_bw() +
  theme(axis.text = element_text(size = 12),
        axis.title = element_text(size = 15)) +
  theme(axis.title.x = element_text(vjust = -0.8),
        axis.title.y = element_text(vjust = 3),
        axis.text.y = element_text(angle = 90, vjust = 1.5, hjust = 0.5)) +
  theme(legend.title = element_text(size = 15),
        legend.text = element_text(size = 12))

报错原因说明

之前使用scale_x_datetime或scale_x_continuous报错,大概率是因为:

  1. 未先筛选数据,导致datetime包含1-6月的记录,x轴范围设置与数据不匹配;
  2. scale_x_continuous不适合日期类型的x轴,必须用scale_x_datetime配合日期格式的limits参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:48:22