R语言ggplot绘图如何汇总低于阈值的数值生成Other分类
R语言ggplot绘制带Other合并分类柱状图实现方案
两种实现路径,可根据是否需要展示Other分类下的细分项选择:
- 方案1:将小数值分类合并为单行Other汇总项,最终仅展示4个分类
- 方案2:保留小数值分类的明细,在Other柱形内堆叠展示细分项
方案1:汇总生成Other分类行
直接对原数据做分组聚合,把所有Count小于50的条目统一归为Other组求和,输出的数据集可直接用于ggplot绘图:
# 加载数据处理与绘图包 library(ggplot2) library(dplyr) # 读入示例数据 dat <- read.table(text="Color Count Red 550 Blue 309 Green 296 Purple 49 Yellow 36 Brown 19", head=TRUE) # 数据聚合处理 dat_agg <- dat |> mutate(plot_cat = ifelse(Count >= 50, Color, "Other")) |> group_by(plot_cat) |> summarise(total_count = sum(Count), .groups = "drop")
处理后dat_agg的输出如下,Other类计数值正好为104:
| plot_cat | total_count |
|---|---|
| Blue | 309 |
| Green | 296 |
| Other | 104 |
| Red | 550 |
直接调用ggplot绘图即可:
ggplot(dat_agg, aes(x = plot_cat, y = total_count, fill = plot_cat)) + geom_col(width = 0.7)
方案2:堆叠展示Other分类下的细分项
不需要提前聚合小类数值,绘图时通过双层分类映射,让Purple、Yellow、Brown三个小类自动堆叠在Other的x轴位置,既满足Other分类的合并展示需求,也能保留细分项的区分度:
dat_stacked <- dat |> mutate( # 外层x轴分组:>=50保留原分类,其余归为Other x_cat = ifelse(Count >= 50, Color, "Other"), # 填充色映射保留原始颜色分类 fill_cat = Color ) ggplot(dat_stacked, aes(x = x_cat, y = Count, fill = fill_cat)) + geom_col(width = 0.7)
该方法绘制的Other柱形总高度同样为104,柱内按三个小类的数值自动分段堆叠。
内容的提问来源于stack exchange,提问作者Eric Dodson
相关产品推荐
相关产品推荐

