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

使用R中sjPlot包plot_likert绘制分组李克特图时出错

解决sjPlot::plot_likert分组绘制报错问题

错误原因

报错Error: Length of groups has to equal the number of items: ncol(items) != length(groups)是因为plot_likert的groups参数要求长度等于李克特项目的列数,但你传入的mydf1$Domain是每行观测的分组标签(长度等于数据行数),两者长度不匹配。

解决方案

要实现按Teacher/Student分组的李克特图,有两种简洁的处理方式:

方法一:将宽格式数据转为长格式绘制

先把数据转换为长格式,让每个观测对应一行项目-响应-分组的记录,再用group参数指定分组:

library(sjPlot)
library(ggplot2)
library(readxl)
library(tidyr)
library(dplyr)

# 修正路径格式(Windows用双反斜杠或正斜杠)
mydf1 <- read_excel("C:\\Users\\HP\\Desktop\\aa\\source_teacher.xlsx")
mydf1 <- data.frame(mydf1)
mydf1$Domain <- factor(mydf1$Domain)

legend_labels <- c("1 Never", "2 Sometime", "3 Often", "4 Very Often")

# 宽格式转长格式
mydf_long <- mydf1 %>%
  pivot_longer(cols = -Domain, names_to = "Item", values_to = "Response")

# 绘制分组李克特图
p <- plot_likert(
  data = mydf_long,
  items = Response,
  group = Domain,
  item_labels = unique(mydf_long$Item),
  catcount = 4,
  legend.labels = legend_labels
)

p + theme(
  axis.text.y = element_text(color = "black", size = 14),
  legend.position = "bottom"
)

方法二:拆分数据为分组后绘制

将原数据按Domain拆分为两个独立的宽格式数据框,放在列表中传入plot_likert,函数会自动识别列表元素为分组:

library(sjPlot)
library(ggplot2)
library(readxl)
library(dplyr)

# 修正路径格式
mydf1 <- read_excel("C:\\Users\\HP\\Desktop\\aa\\source_teacher.xlsx")
mydf1 <- data.frame(mydf1)
mydf1$Domain <- factor(mydf1$Domain)

legend_labels <- c("1 Never", "2 Sometime", "3 Often", "4 Very Often")

# 按分组拆分数据
teacher_df <- mydf1 %>% filter(Domain == "Teacher") %>% select(-Domain)
student_df <- mydf1 %>% filter(Domain == "Student") %>% select(-Domain)

# 绘制分组李克特图
p <- plot_likert(
  list(Teacher = teacher_df, Student = student_df),
  catcount = 4,
  legend.labels = legend_labels
)

p + theme(
  axis.text.y = element_text(color = "black", size = 14),
  legend.position = "bottom"
)

额外注意点

原代码中的文件路径存在转义问题,Windows系统下需用双反斜杠\\或正斜杠/替代单反斜杠,否则会导致文件读取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:26:05