在R中如何按Name列分组为每个姓名绘制对应Score的直方图
R按姓名分组绘制分数直方图实现方案
前置准备:构造测试数据集
先基于你提供的示例数据构造R可识别的数据框:
df <- data.frame( Name = c("Anna", "David", "Juli", "Anna", "David", "Juli", "Anna", "David", "Juli"), Score = c(40, 30, 20, 20, 50, 40, 20, 20, 20) )
实现方法1:基础R原生实现(无需额外安装包)
思路是遍历所有唯一姓名,筛选对应分数后逐个绘制直方图:
# 获取所有唯一姓名 unique_names <- unique(df$Name) # (可选)调整画布布局,把3张图放在同一行展示 par(mfrow = c(1, 3)) # 循环绘制直方图 for (name in unique_names) { # 筛选当前姓名的分数 sub_score <- df$Score[df$Name == name] # 绘制直方图 hist(sub_score, main = paste0(name, "分数分布"), xlab = "分数", ylab = "频次", col = "lightblue", breaks = seq(0, 60, 10) # 固定分数区间,方便跨组对比 ) }
绘制完成后可执行par(mfrow = c(1,1))恢复默认画布布局
实现方法2:ggplot2分面实现(更推荐,可视化效果更好)
用分面功能无需写循环,可一键生成分组直方图,代码更简洁规范:
# 未安装ggplot2先执行 install.packages("ggplot2") library(ggplot2) ggplot(df, aes(x = Score)) + geom_histogram(binwidth = 10, fill = "lightblue", color = "black") + # 按姓名分面,每行最多放3张图 facet_wrap(~Name, nrow = 1) + labs(x = "分数", y = "频次") + theme_bw()
可根据需求调整binwidth参数修改直方图的区间宽度,调整nrow/ncol修改分面的排列方式
内容的提问来源于stack exchange,提问作者RasK
相关产品推荐
相关产品推荐

