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

如何在ggplot2中按指定因子顺序排序Likert图与柱状图?

在R中按指定顺序绘制Likert图和柱状图

核心思路是将数据中的分类列(即你的var列)转换为因子类型,手动指定因子水平的顺序为c("A","C","D","E","B")。ggplot2会依据因子水平的顺序排列坐标轴,从而实现自定义排序,而非默认的字母序或数值总和排序。


1. 预处理数据:设置因子顺序

不管是用于柱状图的df还是用于Likert图的df2,都需要先调整var列的因子水平:

library(dplyr)

# 处理柱状图数据df
df <- df %>%
  mutate(var = factor(var, levels = c("A", "C", "D", "E", "B"), ordered = TRUE))

# 处理Likert图数据df2(假设分类列也是var)
df2 <- df2 %>%
  mutate(var = factor(var, levels = c("A", "C", "D", "E", "B"), ordered = TRUE))

levels参数直接指定你需要的排序顺序,ordered=TRUE确保顺序被严格遵循。


2. 绘制指定顺序的柱状图(基于df)

假设df每行对应一个var水平,包含数值列(比如proportion表示占比):

library(ggplot2)

ggplot(df, aes(x = proportion, y = var)) +
  geom_col(fill = "#2E8B57") +
  labs(x = "比例", y = "类别", title = "按指定顺序排列的柱状图") +
  theme_minimal()

y = var会按照设置的因子顺序从上到下排列,完全符合你的要求。


3. 绘制指定顺序的Likert图(基于df2)

假设df2是长格式,包含var(类别)、response(Likert选项)、proportion(各选项占比):

# 先设置Likert选项的逻辑顺序(根据你的实际选项调整)
df2 <- df2 %>%
  mutate(response = factor(response, levels = c("非常不同意", "不同意", "中立", "同意", "非常同意")))

ggplot(df2, aes(x = proportion, y = var, fill = response)) +
  geom_col(position = position_stack(reverse = TRUE)) + # 反转堆叠让低同意度在左侧
  scale_x_continuous(limits = c(-100, 100), breaks = seq(-100, 100, 25)) + # 对称x轴适配Likert图
  labs(x = "比例", y = "类别", title = "按指定顺序排列的Likert图", fill = "Likert选项") +
  theme_minimal()

y = var的排序由之前设置的因子水平决定,会严格按照"A,C,D,E,B"从上到下排列。

内容的提问来源于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 09:47:10