R新手求助:多列评分数据的箱线图绘制问题
解决R语言ggplot2箱线图绘制问题
问题分析
你的代码存在两个核心问题:
- 每个动词对应的评分数量不一致(部分列有31个值,部分为30个),导致无法创建合法的
data.frame - 数据是宽格式(每个动词单独一列),而ggplot2绘制分组箱线图需要长格式(一列存动词类别,一列存对应评分值)
解决步骤
1. 修正数据集,确保每列长度一致
检查并删除每个动词列中多余的评分值,保证每个动词对应30个参与者的评分。修正后的数据集代码如下:
# 修正后的数据集:每个动词对应30个评分 data_frame <- data.frame( arrivare = c(9,8,9,9,9,9,9,9,9,9,9,9,7,9,9,9,9,9,9,9,9,9,9,9,5,9,9,9,9,8), tornare = c(9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,8,8), cambiare = c(9,8,9,9,9,9,9,8,9,9,9,9,9,8,9,7,9,9,9,9,9,9,9,9,9,9,9,9,9,8), continuare = c(8,8,6,9,8,5,2,7,7,9,1,2,7,8,1,9,9,9,8,9,6,9,1,6,9,1,8,9,8,9), vivere = c(9,3,7,1,9,9,2,8,5,6,3,2,9,6,9,2,9,9,5,1,9,1,9,1,1,1,1,9,9,8), abitare = c(1,1,1,1,1,7,1,1,2,7,1,2,3,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1), suonare = c(7,1,8,1,7,7,1,9,8,8,1,1,9,6,1,9,1,9,3,3,2,9,1,7,5,1,9,9,8,9) )
2. 将宽格式数据转换为长格式
使用tidyr包的pivot_longer函数转换数据格式(若未安装该包需先安装):
# 安装并加载tidyr包 install.packages("tidyr") library(tidyr) # 转换为长格式:一列存动词名称,一列存对应评分 long_data <- pivot_longer(data_frame, cols = everything(), names_to = "动词", values_to = "评分")
3. 绘制箱线图
用ggplot2绘制符合需求的箱线图:
library(ggplot2) ggplot(long_data, aes(x = 动词, y = 评分)) + geom_boxplot(fill = "lightgreen") + xlab("动词") + ylab("可接受性评分") + ggtitle("不同动词的可接受性评分箱线图") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签,避免重叠
额外说明
- 转换为长格式是ggplot2处理分组数据的标准要求,每个观测值对应一行数据,便于映射到图形属性
- 若不想安装
tidyr,也可使用基础R的reshape函数完成格式转换,但tidyr的语法更简洁直观
内容的提问来源于stack exchange,提问作者Daler Fergani
相关产品推荐
相关产品推荐

