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

如何在R中使用facet_wrap按周七日分面可视化每小时平均数据

问题排查与修复方案

错误原因

  • 分组逻辑错误:两次单独的group_by会覆盖前一次分组,且你需要按「工作日(weekdays)+小时(hour)」同时分组才能计算每个工作日每小时的平均值,而不是按day列分组(示例中的day是日期序号,不是星期分类)
  • 语法缺失:group_by(hour)后没有加管道符%>%,导致summarise没有承接前面的数据集运算
  • 列引用错误:summarise运算后只会保留分组列和新生成的avg_hour列,原数据的Value、weekdays列已经被汇总掉,ggplot里直接引用y=Value、color=weekdays自然找不到对应列
  • 列缺失导致类型错误:因为前面的语法错误导致传入ggplot的数据集不存在hour列,R误调用了内置的hour函数作为x轴映射,所以抛出「object of type function」的报错
  • 未加分面语句:原代码没有添加facet_wrap实现按工作日分面的需求

修复后完整代码

library(dplyr)
library(ggplot2)

# 先把weekdays转成有序因子,保证分面按周一到周日的顺序排列
df$weekdays <- factor(df$weekdays, 
                      levels = c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"),
                      ordered = TRUE)

# 分组汇总+绘图
df %>%
  group_by(weekdays, hour) %>% # 同时按工作日、小时分组
  summarise(avg_hour = mean(Value), .groups = "drop") %>% # 汇总后自动取消分组
  ggplot(aes(x = hour, y = avg_hour, color = weekdays)) + 
  geom_line(linewidth = 1) + 
  facet_wrap(~weekdays, nrow = 1) + # 按工作日分面
  ylab("平均Value") + 
  xlab("小时") +
  theme_bw()

效果说明

运行上述代码后,会生成7个分面,每个分面对应一个工作日,x轴是24小时,y轴是对应工作日对应小时的Value平均值,完全匹配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:54:10