分组数据条形图绘制:同项不同变体均值聚类展示需求
同一Item的v1/v2变体评分均值聚类条形图实现
首先是你的数据集:
df <- data.frame(ID = c(1:18), Question = c('v1_item_1', 'v1_item_1', 'v2_item_1', 'v2_item_2', 'v1_item_2', 'v2_item_2','v1_item_2', 'v2_item_2','v1_item_2', 'v2_item_2','v1_item_3','v2_item_3','v1_item_3','v2_item_3','v1_item_3','v2_item_3','v1_item_4','v2_item_4'), Answer = sample(1:5, 18, replace = TRUE))
要实现同一item的v1、v2条形聚类展示,不用手动重塑数据,直接用tidyr拆分Question列,再结合dplyr和ggplot2就能快速完成:
步骤1:拆分Question列,分离变体类型与Item编号
用separate函数把Question拆成两列:Version(v1/v2)和Item(item_1/item_2等),分隔符用下划线_:
library(dplyr) library(tidyr) library(ggplot2) df_processed <- df %>% separate(Question, into = c("Version", "Item"), sep = "_", extra = "merge")
这里extra = "merge"是为了保留item_1里的下划线,避免被拆成多列。
步骤2:计算每个(Version, Item)组合的评分均值
用group_by按Version和Item分组,再用summarize计算均值(比mutate更高效,仅保留每组一行均值数据):
df_summary <- df_processed %>% group_by(Version, Item) %>% summarize(mean_score = mean(Answer), .groups = "drop")
步骤3:绘制聚类条形图
用ggplot把x设为Item,fill设为Version,同一Item的v1、v2条形会自动聚类,再用position_dodge()让条形并排展示:
ggplot(df_summary, aes(x = Item, y = mean_score, fill = Version)) + geom_col(position = position_dodge(width = 0.8), width = 0.7) + geom_text(aes(label = round(mean_score, 2)), position = position_dodge(width = 0.8), vjust = -0.5) + # 把均值标签放在条形上方 labs(title = "不同Item的v1/v2评分均值对比", x = "Item编号", y = "平均评分", fill = "版本") + theme_minimal()
这样生成的图表中,每个Item对应的v1和v2条形会相邻排列,清晰展示两者的均值差异,整个流程无需复杂数据重塑,步骤简洁高效。
内容的提问来源于stack exchange,提问作者C_bath
相关产品推荐
相关产品推荐

