如何调整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
相关产品推荐
相关产品推荐

