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

如何用ggstats包的gglikert按Region和Dimension可视化多维度调查数据

解决ggstats::gglikert按Region和Dimension分组/分面的问题

要实现按Region和Dimension分组或分面的李克特图,核心是先把你的宽格式数据转换为gglikert要求的长格式,再通过分面或分组参数实现需求。以下是具体步骤:

1. 数据格式转换(关键步骤)

你的数据是宽格式(每个李克特选项为单独列,如strong_agree),而gglikert需要长格式数据(一列存响应类型,一列存对应计数)。用tidyr::pivot_longer完成转换:

library(tidyr)
library(ggstats)
library(ggplot2)

# 替换cols里的列名为你实际的李克特选项列
df_long <- df %>%
  pivot_longer(
    cols = c(strong_agree, agree, neutral, disagree, strong_disagree),
    names_to = "Response",
    values_to = "Count"
  )

2. 规范李克特选项的顺序

李克特选项是有序分类,必须转为有序因子,否则图中响应顺序会混乱:

# 按逻辑顺序定义响应级别(可根据你的实际选项调整)
response_levels <- c("strong_disagree", "disagree", "neutral", "agree", "strong_agree")
df_long$Response <- factor(df_long$Response, levels = response_levels, ordered = TRUE)

3. 实现分面/分组可视化

情况1:按Region和Dimension双维度分面

用facet_grid实现行/列分面,可根据需求调整Region ~ Dimension的顺序(行是Region,列是Dimension):

gglikert(df_long, x = Question, y = Response, weight = Count) +
  facet_grid(Region ~ Dimension) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠

情况2:按Region分组,Dimension分面

如果需要在同一个子图里对比不同Region的结果,用color和fill参数分组,再按Dimension分面:

gglikert(df_long, x = Question, y = Response, weight = Count, color = Region, fill = Region) +
  facet_wrap(~Dimension, ncol = 2) + # 控制分面列数
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(color = "地区", fill = "地区") # 自定义图例标题

常见问题排查

  • 确保weight = Count参数正确传递:你的数据是计数格式,必须通过weight告诉gglikert每个响应的样本量,否则会把每行当成单个回答,导致结果错误。
  • 检查是否有缺失值:如果Count列有NA,可先用df_long <- df_long %>% filter(!is.na(Count))清理。
  • 确认Question列的每个条目对应唯一的Dimension-Region组合,避免重复数据导致计数异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:43:21