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

如何使用hydroTSM绘制多变量时间序列图?附降水数据示例

多变量月度/季节时间序列图绘制方案

你的每日降水数据结构如下:

> head(df)
    I_2004   G_2004    T_2004       Date
1 3628.79853 2199.310 12741.413 2004-01-01
2 1556.66704 4322.884  5464.395 2004-01-02
3   20.43379 5592.103    72.998 2004-01-03
4  265.94247 8145.041   942.344 2004-01-04
5  914.93958 9668.531  3227.579 2004-01-05
6 2585.63558 6825.905  9043.866 2004-01-06

以下是使用hydroTSM及其他工具简化多变量月度/季节时序图绘制的方案:


一、使用hydroTSM实现

hydroTSM内置了水文时间序列的聚合与绘图工具,无需手动子集化,直接从日数据生成月度/季节时序图:

1. 数据格式转换

首先将数据转为xts对象(hydroTSM的核心数据格式):

library(hydroTSM)
library(xts)

# 确保Date列为日期格式
df$Date <- as.Date(df$Date)
# 转换为xts对象,Date作为索引
xts_data <- xts(df[, !names(df) %in% "Date"], order.by = df$Date)

2. 月度时序图

通过daily2monthly一键聚合日数据为月度数据,直接绘图:

# 按月度求和聚合降水数据
monthly_data <- daily2monthly(xts_data, FUN = sum)

# 绘制多变量月度时序图
plot(monthly_data, 
     main = "月度降水时序图", 
     col = c("#E63946", "#457B9D", "#1D3557"), 
     lwd = 2)
# 添加图例
legend("topright", 
       legend = colnames(monthly_data), 
       col = c("#E63946", "#457B9D", "#1D3557"), 
       lwd = 2)

3. 季节时序图

使用daily2seasonal聚合为季节数据(默认北半球季节:DJF、MAM、JJA、SON):

# 按季节求和聚合
seasonal_data <- daily2seasonal(xts_data, FUN = sum)

# 绘制多变量季节时序图
plot(seasonal_data, 
     main = "季节降水时序图", 
     col = c("#E63946", "#457B9D", "#1D3557"), 
     lwd = 2)
legend("topright", 
       legend = colnames(seasonal_data), 
       col = c("#E63946", "#457B9D", "#1D3557"), 
       lwd = 2)

二、基于tidyverse的简化流程

如果习惯ggplot2风格,可通过lubridate+dplyr的组合,避免手动melt和子集化,高效处理多年数据:

1. 月度时序图

library(tidyverse)
library(lubridate)

df %>%
  # 按月份分组
  mutate(month_date = floor_date(Date, "month")) %>%
  group_by(month_date) %>%
  # 聚合各变量月度总和
  summarise(across(c(I_2004, G_2004, T_2004), sum, .names = "{.col}")) %>%
  # 宽表转长表
  pivot_longer(-month_date, names_to = "站点", values_to = "降水量") %>%
  ggplot(aes(x = month_date, y = 降水量, color = 站点)) +
  geom_line(linewidth = 1) +
  labs(title = "月度降水时序图") +
  theme_minimal()

2. 季节时序图

df %>%
  # 定义季节与年度-季节标识
  mutate(
    season = case_when(
      month(Date) %in% c(12,1,2) ~ "DJF",
      month(Date) %in% c(3,4,5) ~ "MAM",
      month(Date) %in% c(6,7,8) ~ "JJA",
      month(Date) %in% c(9,10,11) ~ "SON"
    ),
    year_season = paste(year(Date), season, sep = "-")
  ) %>%
  group_by(year_season, season) %>%
  summarise(across(c(I_2004, G_2004, T_2004), sum, .names = "{.col}")) %>%
  pivot_longer(-c(year_season, season), names_to = "站点", values_to = "降水量") %>%
  ggplot(aes(x = year_season, y = 降水量, color = 站点, group = 站点)) +
  geom_line(linewidth = 1) +
  labs(title = "季节降水时序图") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:25:37