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

如何在R中对齐并列李克特图与分类计数条形图

解决y轴分类对齐的方案

核心是保证两个图的y轴因子顺序完全一致,再通过拼接工具严格对齐。以下是具体代码步骤:

1. 统一筛选前10个分类并固定因子顺序

先从原数据框df中提取你用来绘制李克特图的前10个分类,将var转换为固定顺序的因子,确保两个图的y轴顺序绑定:

# 示例:按总响应计数筛选前10个分类,可替换为你实际的筛选逻辑
top10_vars <- df %>%
  count(var, sort = TRUE) %>%
  slice(1:10) %>%
  pull(var)

# 生成筛选后的数据集,固定var的因子水平顺序(反转适配水平图的y轴方向)
df_top10 <- df %>%
  filter(var %in% top10_vars) %>%
  mutate(var = factor(var, levels = rev(top10_vars)))

2. 绘制水平李克特图

基于固定顺序的数据集绘制,可保留你原有的自定义设置:

library(ggstats)
library(ggplot2)

likert_plot <- ggplot(df_top10, aes(y = var, x = val1)) +
  geom_likert() +
  # 自定义主题/标题等设置
  theme(axis.title.y = element_blank()) # 先去掉y轴标题,避免拼接后重复

3. 绘制计数条形图

同样使用固定顺序的var作为y轴,去掉重复的y轴文本:

count_plot <- df_top10 %>%
  count(var) %>%
  ggplot(aes(y = var, x = n)) +
  geom_col(fill = "#6366F1") +
  labs(x = "响应计数") +
  theme(axis.title.y = element_blank(),
        axis.text.y = element_blank()) # 隐藏计数图的y轴文本,避免重复

4. 拼接并强制对齐

用ggpubr或patchwork实现对齐拼接:

用ggpubr的方式:

library(ggpubr)

ggarrange(likert_plot, count_plot,
          widths = c(3, 1), # 调整两图宽度比例
          align = "v", # 强制垂直对齐y轴
          common.legend = FALSE)

用patchwork的方式:

library(patchwork)

likert_plot + count_plot +
  plot_layout(widths = c(3, 1), align = "v")

关键注意事项

  • 两个图的var必须是完全相同顺序的因子,不能用默认的字母排序,否则对齐会混乱。
  • 拼接时必须设置align = "v",确保y轴刻度和分类完全对齐。
  • 隐藏其中一个图的y轴文本和标签,避免重复显示。

内容的提问来源于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.16 05:57:14