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

如何用ggplot2基于汇总数据绘制班级分数箱线图?

你当前的melt方向是对的,但还需要把汇总的频数数据还原成每个学生的个体分数记录——因为箱线图是基于个体数据计算四分位数、极值等统计量的,没法直接用汇总频数数据绘制。具体操作步骤如下:

1. 转换长格式并展开个体数据

先把宽表转成长表,再根据各班对应分数的人数,重复对应的分数行,还原成每个学生的分数记录:

# 先安装依赖包(首次使用时运行)
install.packages(c("reshape2", "tidyr", "ggplot2"))

library(reshape2)
library(tidyr)
library(ggplot2)

# 宽表转长表,明确列名
df_long <- melt(df, id.vars = "score", variable.name = "class", value.name = "count")

# 根据人数展开数据,得到每个学生的单条记录
df_expanded <- uncount(df_long, count)

如果不想用tidyr包,也可以用base R的rep函数实现展开:

df_expanded <- df_long[rep(seq(nrow(df_long)), df_long$count), c("score", "class")]

2. 绘制箱线图

有了个体数据后,就可以直接用ggplot绘制目标箱线图了:

ggplot(df_expanded, aes(x = class, y = score)) +
  geom_boxplot(fill = "lightblue", alpha = 0.7) +
  labs(x = "班级", y = "分数", title = "各班分数分布箱线图") +
  theme_minimal()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 14:45:43