求助:如何绘制按日期&小时分组的声级子组均值折线图
解决每日每小时平均声级折线图的问题
没问题!你现在的代码只按Hour单一维度分组,所以丢失了Date的子组信息。要实现每个日期对应一条折线的需求,我们需要调整分组逻辑,同时按Date和Hour计算均值,再在绘图时用Date作为分组依据。
步骤1:修正均值计算
首先,我们需要同时按Date和Hour分组,这样就能得到每个日期下每小时的平均声级:
# 先构造你的示例数据(如果已有数据框可以跳过这步) sound <- data.frame( Hour = c(1, 2, 1, 2), Date = c("18-May", "18-May", "19-May", "19-May"), SPL = c(107.9868, 106.5656, 107.4321, 107.8993) ) # 按Date和Hour分组计算均值 library(dplyr) spl_mean <- sound %>% group_by(Date, Hour) %>% # 同时按日期和小时分组 summarize( Mean = mean(SPL, na.rm = TRUE), .groups = "drop" # 取消分组状态,方便后续ggplot处理 )
步骤2:绘制多折线图
接下来在ggplot中,我们把group参数设为Date,同时用color区分不同日期的折线,这样每个日期会对应一条独立的线:
library(ggplot2) ggplot(data = spl_mean, aes(x = Hour, y = Mean)) + geom_line(aes(group = Date, color = Date), size = 2) + # 按Date分组画线,颜色区分 labs( x = "Hour of Day", y = "Average Sound Pressure Level (SPL)", title = "Hourly Average SPL by Date", color = "Date" ) + theme_minimal()
效果说明
运行这段代码后,你会看到:
- X轴为一天中的小时数
- Y轴为对应小时的平均声级
- 每个日期对应一条不同颜色的折线,清晰展示每日声级随小时的变化趋势
内容的提问来源于stack exchange,提问作者brc
相关产品推荐
相关产品推荐

