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

ggplot使用ggarrange合并多站点柱状图图例的问题求助

多站点物种丰度Top10柱状图的统一图例与颜色匹配方案

问题背景

我有13个站点的DataFrame,每个包含90个物种的平均丰度数据(示例以4个站点各26个物种模拟),目标是绘制每个站点丰度前10物种的降序柱状图网格。目前遇到的问题:

  • 用ggplot单独绘制每个站点图表后,通过ggarrange设置common.legend=TRUE合并图例时,因各站点Top10物种不同,出现图例不全、物种颜色不统一的情况
  • 不使用公共图例的话,13个站点的图表图例重复,整体十分混乱

解决方案

核心思路是先统一所有物种的颜色映射,再通过数据合并+分面绘图,替代逐个绘图再拼接的方式,确保所有物种颜色一致,且图例完整统一。

步骤1:合并所有站点数据并添加站点标识

先把分散的站点数据合并成一个DataFrame,同时标记每条数据所属的站点:

# 生成示例数据
site1 <- data.frame(species = LETTERS[1:26], abundance = sample(x = 1:10, rep = TRUE, size = 26))
site2 <- data.frame(species = LETTERS[1:26], abundance = sample(x = 1:10, rep = TRUE, size = 26))
site3 <- data.frame(species = LETTERS[1:26], abundance = sample(x = 1:10, rep = TRUE, size = 26))
site4 <- data.frame(species = LETTERS[1:26], abundance = sample(x = 1:10, rep = TRUE, size = 26))

# 合并数据并添加站点列
all_sites <- rbind(
  cbind(site1, site = "site1"),
  cbind(site2, site = "site2"),
  cbind(site3, site = "site3"),
  cbind(site4, site = "site4")
)

步骤2:为所有物种设置统一颜色映射

提取所有物种列表,为每个物种分配唯一颜色,确保跨站点颜色一致:

# 获取所有物种的唯一列表
all_species <- unique(all_sites$species)
# 生成对应颜色(可自定义配色,这里用ggplot默认配色)
species_colors <- scales::hue_pal()(length(all_species))
names(species_colors) <- all_species

步骤3:筛选每个站点的Top10物种

按站点分组,筛选出每个站点丰度最高的10个物种:

library(dplyr)

top10_sites <- all_sites %>%
  group_by(site) %>%
  arrange(desc(abundance)) %>%
  slice_head(n = 10) %>%
  ungroup()

步骤4:分面绘制统一图例的柱状图

使用ggplot的分面功能,一次性绘制所有站点的Top10柱状图,自动生成统一图例:

library(ggplot2)

ggplot(top10_sites, aes(x = reorder(species, -abundance), y = abundance, fill = species)) +
  geom_bar(stat = "identity") +
  # 应用统一颜色映射
  scale_fill_manual(values = species_colors) +
  # 按站点分面,可调整ncol/nrow控制网格布局
  facet_wrap(~site, ncol = 2) +
  # 优化x轴标签,避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  # 统一图例位置(这里放在底部)
  theme(legend.position = "bottom") +
  # 可选:设置图例为多行,避免过长
  guides(fill = guide_legend(nrow = 5))

方案优势

  • 所有物种颜色全局统一,不会出现同一物种在不同站点颜色不同的问题
  • 自动生成完整的公共图例,包含所有出现在任意站点Top10中的物种
  • 分面绘图比ggarrange更简洁,无需单独绘制每个站点的图表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:00:18