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

在R中根据条形图降序排序匹配调整Likert图层级

实现Likert图分组的降序排序

要实现按条形图排序结果调整分组顺序,核心是先计算每个分组(A/B/C)的排序依据(比如正向反馈占比),再将group列转换为按该依据排序的因子,最后传入gglikert即可。

步骤1:计算分组的排序依据

我们以所有年份中「Satisfied」+「Very Satisfied」的总占比作为排序指标(你也可以按需换成单一年份占比、均值等):

library(tidyverse)
library(gglikert)

# 计算每个分组的正向反馈平均占比,生成排序后的分组名称向量
group_order <- df %>%
  pivot_longer(-year, names_to = "group") %>%
  mutate(positive = ifelse(value %in% c("Satisfied", "Very  Satisfied"), 1, 0)) %>%
  group_by(group) %>%
  summarise(total_positive = mean(positive)) %>%
  arrange(desc(total_positive)) %>%
  pull(group)

步骤2:重构数据并指定分组顺序

在数据处理阶段,将group列转换为因子,水平按照group_order的排序结果排列:

plot_data <- df %>%
  mutate(id = row_number()) %>%
  pivot_longer(-c(id, year), names_to = "group") %>%
  # 重置group的因子水平,强制按排序结果展示
  mutate(group = factor(group, levels = group_order)) %>%
  pivot_wider(names_from = year)

步骤3:绘制排序后的Likert图

使用处理好的plot_data调用gglikert,此时facet的分组会按降序排序展示:

gglikert(plot_data, 
         c(`2023`, `2022`, `2020`, `2018`), 
         facet_rows = vars(group))

自定义排序依据

如果想基于某特定年份的正向占比排序,只需修改group_order的计算逻辑:

# 基于2023年的正向反馈占比排序
group_order_2023 <- df %>%
  filter(year == 2023) %>%
  pivot_longer(-year, names_to = "group") %>%
  mutate(positive = ifelse(value %in% c("Satisfied", "Very  Satisfied"), 1, 0)) %>%
  group_by(group) %>%
  summarise(pos_rate = mean(positive)) %>%
  arrange(desc(pos_rate)) %>%
  pull(group)

之后在mutate(group = factor(group, levels = group_order_2023))中替换排序向量即可。


内容的提问来源于stack exchange,提问作者Homer Jay Simpson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 18:47:13