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

求助:基于R语言ggplot2绘制分组日期的时间序列分布图

实现按日期分组的月度时间序列折线图(分年子图)

以下是基于R语言tidyverse和lubridate包的实现方案,完全匹配你的需求:

步骤说明

  1. 数据预处理:从日期列提取年份、月份、日信息,并将日期划分为指定的三个分组
  2. 分面绘图:通过分面功能实现「日期分组+年份」的子图布局,X轴设为月份,每条折线对应一个具体日期

完整代码

# 加载所需包
library(tidyverse)
library(lubridate)

# 假设你的数据框名为df,日期列名为date,数值列名为value
# 数据预处理
df_processed <- df %>%
  # 将日期列转换为Date类型(若未转换)
  mutate(date = ymd(date)) %>%
  # 提取年、月、日信息
  mutate(
    year = year(date),
    month = month(date, label = TRUE, abbr = TRUE), # 月份转为缩写名称(如Jan, Feb)
    day = day(date),
    # 划分日期分组
    day_group = case_when(
      day %in% 1:10 ~ "1-10日",
      day %in% 11:20 ~ "11-20日",
      day %in% 21:31 ~ "21-31日"
    )
  ) %>%
  # 仅保留2020和2021年的数据
  filter(year %in% c(2020, 2021)) %>%
  # 将日期分组转为因子,保证顺序正确
  mutate(day_group = factor(day_group, levels = c("1-10日", "11-20日", "21-31日")))

# 绘制折线图
ggplot(df_processed, aes(x = month, y = value, color = factor(day), group = factor(day))) +
  geom_line(alpha = 0.8, linewidth = 0.6) + # 调整线条透明度和宽度,缓解拥挤
  # 分面:按日期分组行,年份列,子图独立展示
  facet_grid(day_group ~ year) +
  # 自定义标签与标题
  labs(
    x = "月份",
    y = "数值",
    color = "日期",
    title = "2020-2021年每日数值月度分布",
    subtitle = "按日期分组展示"
  ) +
  theme_minimal() +
  theme(
    legend.position = "bottom", # 图例移至底部节省空间
    axis.text.x = element_text(angle = 45, hjust = 1), # X轴标签旋转避免重叠
    strip.text = element_text(size = 10, face = "bold") # 分面标题加粗突出
  )

关键细节解释

  • 日期分组:用case_when划分三组并转为因子,避免分组顺序混乱
  • 月份处理:month(date, label = TRUE)将月份转为可读性更强的缩写,X轴自动按时间顺序排列
  • 分面布局:facet_grid(day_group ~ year)实现「日期分组上下排列、年份左右排列」的布局,若偏好横向排列可替换为facet_wrap(day_group ~ year, ncol = 2)
  • 线条优化:设置alpha透明度和linewidth宽度,缓解同组内多条折线的重叠问题
  • 样式调整:通过theme参数优化图例位置、轴标签显示效果,提升图表可读性

如果你的原始周分布代码有特定样式需求,可将对应参数(如颜色主题、线条类型)替换到上述代码中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:46:04