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

如何在ggplot中对相同频次的X轴类别归为‘其他’以优化图表

解决方案:将低频次类别合并为“其他”

要实现把频次低于指定阈值的People类别统一命名为“其他”,让条形图更整洁,可按以下步骤处理数据后绘图:

1. 统计类别频次并处理数据

先统计每个类别的出现次数,设定阈值筛选需要保留的类别,其余替换为“其他”:

# 加载所需包
library(ggplot2)
library(dplyr)

# 统计每个People类别的频次
category_freq <- albums_df %>%
  count(People, name = "frequency")

# 设定合并阈值(比如把频次≤2的归为“其他”,可按需调整)
merge_threshold <- 2
# 获取需要保留的类别
keep_categories <- category_freq %>% 
  filter(frequency > merge_threshold) %>% 
  pull(People)

# 修改原数据,将非保留类别替换为“其他”
modified_df <- albums_df %>%
  mutate(People = ifelse(People %in% keep_categories, People, "其他"))

2. 绘制整洁的条形图

用处理后的数据绘图,还可以可选排序让图表逻辑更清晰:

# 基础绘图
test_plot <- ggplot(data = modified_df, aes(x = People)) +
  stat_count(width = 0.5) +
  scale_y_continuous(breaks = seq(1, 10, 1)) +
  coord_flip()

# (可选)按频次排序并把“其他”放到最后
test_plot_sorted <- ggplot(data = modified_df %>%
                             mutate(People = forcats::fct_infreq(People)) %>%
                             mutate(People = forcats::fct_relevel(People, "其他", after = Inf)),
                           aes(x = People)) +
  stat_count(width = 0.5) +
  scale_y_continuous(breaks = seq(1, 10, 1)) +
  coord_flip()

# 输出图表
print(test_plot_sorted)  # 推荐用排序后的版本

说明

  • 可根据实际数据调整merge_threshold的值,灵活控制需要合并的类别范围
  • 若未安装forcats包,先运行install.packages("forcats")完成安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:15:15