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

分组数据条形图绘制:同项不同变体均值聚类展示需求

同一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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:52:37