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

如何用ggplot2绘制堆叠条形图:展示前5属比例并合并其余

实现ggplot堆叠条形图:保留前5属+合并剩余类群

当然可以实现,核心是先对数据集做预处理,将前5个高频属保留原名,其余属统一归为“其他属”,再计算各分组的比例,最后用ggplot2绘图即可。

步骤1:数据预处理

先加载dplyr用于数据处理,ggplot2用于绘图,然后对数据进行排序、分组汇总和比例计算:

library(dplyr)
library(ggplot2)

# 修正示例数据(原数据中"N"未加引号,且行号与数据行数不匹配,这里统一修正)
df <- structure(list(Genus = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N"), 
                     Frequency = c(1580, 1456, 927, 900, 625, 611, 535, 534, 452, 341, 323, 314, 254, 247)),
                row.names = c(NA, 14L), class = "data.frame")

# 数据预处理:分组并计算比例
df_processed <- df %>%
  arrange(desc(Frequency)) %>% # 按频率从高到低排序
  mutate(Genus_group = ifelse(row_number() <= 5, Genus, "其他属")) %>% # 标记前5属和剩余属
  group_by(Genus_group) %>%
  summarise(total_freq = sum(Frequency)) %>% # 分组汇总总频率
  mutate(prop = total_freq / sum(total_freq)) %>% # 计算各分组占比
  arrange(desc(prop)) # 按占比降序排列,保证前5属优先显示

步骤2:绘制堆叠条形图

用geom_col绘制堆叠条形,同时添加百分比标签,让比例更直观:

ggplot(df_processed, aes(x = "", y = prop, fill = Genus_group)) +
  geom_col(width = 0.6) + # 设置条形宽度
  geom_text(aes(label = scales::percent(prop, accuracy = 0.1)), 
            position = position_stack(vjust = 0.5)) + # 居中显示百分比标签
  scale_fill_brewer(palette = "Set3") + # 选择配色方案
  scale_y_continuous(labels = scales::percent) + # y轴显示百分比格式
  labs(title = "属级类群比例分布", x = "", y = "比例") +
  theme_minimal() +
  theme(axis.text.x = element_blank()) # 隐藏x轴无意义的刻度文本

处理后的图表会单独展示前5个属的精确比例,所有剩余属的总比例合并为“其他属”呈现,完全满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:04:49