如何用R对5年夏小时数据绘制含均值线、最值的时序图?
实现方法
一、数据汇总(计算小时维度的均值、最小值、最大值)
先加载所需R包,从datetime字段提取小时信息,再按小时分组计算各变量的统计指标:
# 加载必要包 library(tidyverse) library(lubridate) # 读取你提供的数据集 df <- structure(list(datetime = structure(c(1559347200, 1559350800, 1559354400, 1559358000, 1559361600, 1559365200, 1559368800, 1559372400, 1559376000, 1559379600), tzone = "UTC", class = c("POSIXct", "POSIXt")), BUSwt = c(77.8154, 77.2538, 76.9325, 76.81235, 76.6544, 76.3403, 76.16165, 76.22375, 76.47035, 76.74395), MBwt = c(78.3653, 78.53495, 78.6074, 78.30725, 78.0368, 77.9477, 77.8946, 77.927, 78.12455, 78.23615), SUSwt = c(76.2575, 76.0055, 75.7265, 75.425, 75.137, 74.849, 74.651, 74.624, 74.696, 74.8535)), row.names = c(NA, -10L), class = c("tbl_df", "tbl", "data.frame")) # 提取小时,按小时分组计算统计量 hourly_stats <- df %>% mutate(hour = hour(datetime)) %>% group_by(hour) %>% summarise( across(c(BUSwt, MBwt, SUSwt), list(mean = mean, min = min, max = max), .names = "{.col}_{.fn}") ) # 查看汇总结果 print(hourly_stats)
运行后会得到按小时分组的统计结果,每个变量对应均值、最小值、最大值三个指标。
二、绘制时间序列图
将汇总数据转为长格式后,用ggplot2绘制包含均值线、最小-最大区间的时间序列图:
# 转换为长格式,方便可视化 long_stats <- hourly_stats %>% pivot_longer( cols = -hour, names_to = c("variable", "stat"), names_sep = "_", values_to = "value" ) %>% pivot_wider(names_from = stat, values_from = value) # 绘制时间序列图 ggplot(long_stats, aes(x = hour)) + # 绘制最小-最大区间填充 geom_ribbon(aes(ymin = min, ymax = max, fill = variable), alpha = 0.2) + # 绘制均值线 geom_line(aes(y = mean, color = variable), linewidth = 1) + # 设置坐标轴与标题 labs( x = "小时", y = "数值", title = "5年6-9月各变量小时统计量时间序列", color = "变量", fill = "变量" ) + theme_minimal() + scale_x_continuous(breaks = 0:23) # 显示0-23所有小时刻度
生成的图表会清晰展示5年间同一小时的变量变化规律,均值线搭配上下区间填充,直观呈现数据的集中趋势与波动范围。
内容的提问来源于stack exchange,提问作者Ryan Gary
相关产品推荐
相关产品推荐

