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

如何调整R语言HH包likert分组图的展示顺序?

调整HH包Likert图的分组显示顺序

问题背景

我正在分析参与培训的医护人员的前后测结果,使用R语言的HH包绘制Likert量表项目的分组对比图。遇到两个问题:

  • 按测试时间(培训前、培训后)分组绘图时,默认后测图在上、前测图在下,不符合阅读逻辑,希望将前测图置于上方。
  • 以ProfChal数据集为例,希望将「Gender」组展示在「Employment Sector」组上方(非字母或数字顺序),但无法从HH包文档中找到调整方法,误以为与scales=list(y=list(relation="free"))参数相关。

解决方案

HH包的likert()函数会遵循数据中分组变量的因子水平顺序来排列面板和分组,因此只需提前将分组变量的因子水平设置为目标顺序即可,与scales参数无关。

1. 针对ProfChal数据集的修改代码

library(HH)
library(tidyverse)
library(vcd)
data("ProfChal", package = "HH")

# 重新定义Subtable的因子水平:将Gender放在最前,Employment Sector紧随其后,其余按需求调整
ProfChal$Subtable <- factor(ProfChal$Subtable, 
                            levels = c("Gender", "Employment Sector", "Age Group", 
                                       "Academic Rank", "Tenure Status", "Track"))

# 绘制Likert图,面板顺序将严格遵循因子水平设置
likert(Question ~ . | Subtable, data = ProfChal, as.percent = TRUE, positive.order = TRUE, 
       scales = list(y = list(relation = "free")), layout = c(1, 6))

2. 针对医护人员前后测场景的扩展

假设你的数据集为df,分组变量为test_time(取值为"培训前"、"培训后"),只需调整因子顺序即可让前测图显示在上:

# 重新定义测试时间的因子水平顺序
df$test_time <- factor(df$test_time, levels = c("培训前", "培训后"))

# 绘制分组对比图
likert(question ~ . | test_time, data = df, as.percent = TRUE, positive.order = TRUE)

关键说明

  • scales=list(y=list(relation="free"))的作用是让每个面板的y轴刻度独立显示,与分组顺序无关。
  • 只要将分组变量转换为有序因子并指定levels参数,likert()就会按照该顺序绘制面板和分组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:44:51