在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
相关产品推荐
相关产品推荐

