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

LDA分析中ggplot按beta值降序排序及可视化优化问询

解决LDA主题词beta值柱状图排序与可读性问题

我来帮你搞定这个问题!你现在的代码已经接近目标了,只需要调整排序逻辑,再加点细节就能让图表既按beta降序排列,又提升数值可读性。

一、实现每个主题内按beta值降序排列

你当前的reorder(term, beta)是基于全局beta值排序,而非每个主题内部的降序。这里有两种简单的调整方式:

方法1:使用tidytext包的reorder_within(推荐)

# 先确保加载必要的包
library(tidytext)
library(ggplot2)
library(dplyr)
library(scales)

# 修正代码顺序(先训练LDA再提取beta)
ap_lda <- LDA(dtm.new, k = 15, control = list(alpha=0.1,seed=1234))
ap_topics <- tidy(ap_lda, matrix = "beta")
ap_top_terms <- ap_topics %>% 
  group_by(topic) %>% 
  top_n(15, beta) %>% 
  ungroup() %>% 
  arrange(topic, -beta)  # 数据层面先按主题+beta降序排列

# 绘图部分调整排序逻辑
ap_top_terms %>%
  mutate(term = reorder_within(term, beta, topic)) %>%  # 按每个主题内的beta值排序term
  ggplot(aes(term, beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  scale_x_reordered()  # 配合reorder_within确保坐标轴显示正确

方法2:用forcats包的fct_reorder手动分组排序

如果不想额外加载tidytext,也可以用这种方式:

ap_top_terms %>%
  mutate(term = fct_reorder(term, -beta, .by = topic)) %>%  # 按主题分组,beta降序排列term
  ggplot(aes(term, beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free") +
  coord_flip()

二、提升beta值的可读性

把小数形式的beta转换成百分比,或者调整图表细节,能让数值含义更直观:

优化后的完整代码(含百分比显示+细节调整)

ap_top_terms %>%
  mutate(term = reorder_within(term, beta, topic)) %>%
  ggplot(aes(term, beta, fill = factor(topic))) +
  geom_col(show.legend = FALSE) +
  facet_wrap(~ topic, scales = "free", ncol = 3) +  # 调整分面列数,避免拥挤
  coord_flip() +
  scale_x_reordered() +
  scale_y_continuous(labels = percent_format(accuracy = 0.1)) +  # 显示为百分比,保留1位小数
  labs(title = "LDA各主题Top15主题词Beta值分布",
       x = "主题词",
       y = "Beta值(主题词在该主题中的概率占比)") +
  theme_bw() +  # 用简洁的白色主题
  theme(axis.text.y = element_text(size = 8),  # 缩小y轴文字,避免重叠
        strip.text = element_text(size = 10))  # 调整分面标题大小

小说明

你原来的arrange(topic, -beta)已经在数据层面做了降序,但ggplot的排序需要明确指定按主题分组,所以用reorder_within或者fct_reorder(.by = topic)才能实现每个分面内的独立降序。转换成百分比后,beta值代表的“主题词在对应主题中的概率占比”会更易懂。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:06:12