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

ggplot绘图需求:将堆叠柱状图Y轴从计数改为平均时长

修改堆叠柱状图为显示平均时长的方法

嘿,这问题挺常见的,我给你两种实用的解决方案,你可以根据自己的习惯选:

方法1:直接在ggplot中计算均值(无需提前汇总)

原代码里的geom_bar()默认是统计每组的计数,要改成显示平均时长,我们需要明确告诉ggplot要计算duration的均值,并用柱状图展示。可以用stat_summary()来实现:

library(ggplot2)

ggplot(data2, aes(x = factor(week), y = duration, fill = question)) +
  stat_summary(fun = mean, geom = "col", position = "stack") +
  xlab("Week") +
  ylab("Average Duration")  # 别忘了给Y轴加个明确的标签

关键点说明:

  • 把x = week改成x = factor(week),让周次作为离散的分类变量(避免被当成连续数值处理)
  • 在aes()里加入y = duration,指定我们要计算的目标变量
  • stat_summary(fun = mean)告诉ggplot用均值函数来汇总数据
  • geom = "col"指定用柱状图展示结果,position = "stack"保持堆叠效果

方法2:先手动汇总数据再绘图(更清晰可控)

如果你喜欢先把数据整理清楚再绘图,用dplyr提前计算每周每个问题的平均时长会更直观,也方便后续做其他调整:

library(ggplot2)
library(dplyr)

# 第一步:分组计算平均时长
summary_data <- data2 %>%
  group_by(week, question) %>%
  summarise(avg_duration = mean(duration), .groups = "drop")

# 第二步:用汇总后的数据绘图
ggplot(summary_data, aes(x = factor(week), y = avg_duration, fill = question)) +
  geom_col(position = "stack") +
  xlab("Week") +
  ylab("Average Duration")

为什么这种方法更好?

提前汇总数据后,你可以随时查看计算结果是否正确,而且如果后续需要添加标准差、置信区间之类的元素,也更容易扩展。


内容的提问来源于stack exchange,提问作者D. Studer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:42:29