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

如何在R中绘制带个体标签的Wright Map(项目-人员图)?

在R中制作带个体标签的项目-人员图(Wright Map)

方法1:基于wrightmap包替换人员直方图为标签

wrightmap包默认以直方图/密度图展示人员theta分布,但可以通过自定义绘图函数替换为个体标签:

  1. 先完成IRT模型拟合与参数提取:
library(mirt)
library(wrightmap)

# 拟合单维Rasch模型(根据你的数据调整模型类型)
irt_model <- mirt(data = your_dataset, model = 1, itemtype = "Rasch")
# 提取项目beta参数
item_betas <- sapply(coef(irt_model, IRTpars = TRUE)[-length(coef(irt_model, IRTpars = TRUE))], 
                     function(x) x[1])
# 提取人员theta估计值
person_thetas <- fscores(irt_model)
# 准备人员标签(比如你的TD/RSK/SD分组)
person_labels <- your_label_vector # 替换为你的实际标签向量
  1. 自定义人员绘图函数:
# 自定义函数:在对应theta位置绘制人员标签,加入随机抖动避免重叠
custom_person_plot <- function(theta, labels, ...) {
  y_jitter <- jitter(rep(0.5, length(theta)), amount = 0.3)
  text(theta, y_jitter, labels = labels, cex = 0.8, col = "#2c3e50")
  axis(side = 1, at = seq(-3, 3, 1))
}
  1. 调用wrightmap生成带标签的图:
wrightmap(item_betas, person_thetas,
          person_plot = custom_person_plot,
          person_args = list(labels = person_labels),
          item_labels = names(item_betas)) # 显示项目标签

方法2:用ggplot2完全自定义(更灵活)

如果需要精细控制样式,用ggplot2手动拼接项目与人员模块:

  1. 整理绘图数据:
library(ggplot2)
library(ggrepel) # 用于自动避免标签重叠

# 项目数据框
item_data <- data.frame(
  beta = item_betas,
  item_name = names(item_betas),
  y_pos = 1 # 项目模块的y轴基准位置
)

# 人员数据框
person_data <- data.frame(
  theta = as.vector(person_thetas),
  group_label = person_labels,
  y_pos = 0 # 人员模块的y轴基准位置
)
  1. 绘制Wright Map:
ggplot() +
  # 绘制项目点与标签
  geom_point(data = item_data, aes(x = beta, y = y_pos), size = 3, color = "#e74c3c") +
  geom_text(data = item_data, aes(x = beta, y = y_pos + 0.1, label = item_name), size = 3) +
  # 绘制人员标签(用ggrepel自动避免重叠)
  geom_text_repel(data = person_data, aes(x = theta, y = y_pos, label = group_label),
                  size = 2.5, color = "#2c3e50", direction = "y", box.padding = 0.2) +
  # 添加特质水平参考线
  geom_vline(xintercept = seq(-3, 3, 1), linetype = "dashed", color = "gray80") +
  # 调整坐标轴与布局
  scale_y_continuous(limits = c(-0.5, 1.5), breaks = c(0, 1), labels = c("人员", "项目")) +
  labs(x = "特质水平(Theta/Beta)", y = "") +
  theme_minimal() +
  theme(panel.grid = element_blank())

注意事项

  • 标签重叠:如果标签过多,ggrepel的geom_text_repel()比手动抖动更高效,还可以调整size、box.padding参数优化显示。
  • 项目展示:如果需要保留WinSteps中项目的难度条样式,可添加geom_segment绘制项目的阈值区间(根据IRT模型的阈值参数调整)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:00:23