在R中使用ggplot并排绘制分组后的两列均值对比图
解决方案:分组计算均值并绘制并排柱状图
没问题,我来一步步帮你实现这个需求!我们会用到tidyverse包(整合了数据处理的dplyr和绘图的ggplot2),先从数据处理开始:
1. 准备样例数据(如果还没创建的话)
首先先把你提供的样例数据转换成R的数据框:
library(tidyverse) # 创建样例数据框 mydata <- tibble( Backlog.Item.Type = c("User Story", "Task", "Task", "Epic", "User Story", "Bug"), Item.Created.To.Closed.Days = c(67, 14, 9, 105, 56, 5), Item.Created.To.Finished.Days = c(84, 17, 10, NA, 59, NA) )
2. 分组计算均值并整理数据
接下来按Backlog.Item.Type分组,计算两个天数列的均值(注意要忽略NA值),然后把宽格式数据转成长格式——这是ggplot绘制多组对比图的关键:
# 分组计算均值+转换为长格式 summary_data <- mydata %>% group_by(Backlog.Item.Type) %>% summarise( Closed_Mean = mean(Item.Created.To.Closed.Days, na.rm = TRUE), Finished_Mean = mean(Item.Created.To.Finished.Days, na.rm = TRUE) ) %>% pivot_longer( cols = c(Closed_Mean, Finished_Mean), names_to = "Metric", values_to = "Average_Days" ) %>% # 给Metric列改个更友好的名字,方便绘图显示 mutate(Metric = case_when( Metric == "Closed_Mean" ~ "Created to Closed", Metric == "Finished_Mean" ~ "Created to Finished" ))
3. 用ggplot绘制并排柱状图
现在用整理好的长格式数据绘图,通过position = "dodge"实现柱子并排:
ggplot(summary_data, aes(x = Backlog.Item.Type, y = Average_Days, fill = Metric)) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 添加数值标签在柱子顶部 geom_text(aes(label = round(Average_Days, 1)), position = position_dodge(width = 0.8), vjust = -0.5) + # 设置标题和坐标轴标签 labs( title = "Average Days by Backlog Item Type", x = "Backlog Item Type", y = "Average Days", fill = "Time Metric" ) + # 调整主题,让图表更美观 theme_minimal() + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))
代码说明:
group_by()+summarise():按项目类型分组计算均值,na.rm = TRUE确保忽略NA值不影响计算;pivot_longer():把两个均值列合并成一列,方便ggplot按不同指标区分颜色;position_dodge():让同一项目类型的两个柱子并排显示,而不是堆叠;geom_text():在柱子顶部显示具体的均值数值,提升可读性。
运行完这些代码,你就能得到一张清晰的并排柱状图,直观对比每种项目类型在两个时间指标上的平均耗时啦!
内容的提问来源于stack exchange,提问作者Mexolini
相关产品推荐
相关产品推荐

