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

ggplot绘制食蚜蝇月度丰度柱状图:配色优化与图例调整

食蚜蝇月度捕获量堆叠柱状图优化方案

问题背景

现有食蚜蝇数据集包含Genus(属)、Species(种)、SampleID(样本ID)、CorCounts(捕获数量)、Months(月份)列,每行记录单个样本的物种信息(存在重复)。需绘制堆叠柱状图展示月度捕获食蚜蝇数量,用颜色区分不同属/种的丰度占比,但存在两个问题:

  1. 当前配色区分度低,且使用createPalette(42, c("#ff0000", "#00ff00", "#0000ff"))生成色板后,添加scale_fill_manual(values = P42)出现警告:
Warning messages:
1: No shared levels found between `names(values)` of the manual scale and the data's fill values. 
2: No shared levels found between `names(values)` of the manual scale and the data's fill values. 
  1. 图例布局混乱,空间利用率低,可读性差。

解决方案

1. 优化配色方案(解决警告+提升颜色区分度)

警告原因是生成的颜色向量未与Genus的类别名称绑定,导致ggplot无法匹配对应关系。同时,三基色渐变生成的颜色区分度不足,推荐使用专业离散配色工具生成高区分度色板:

步骤:

  • 提取数据中所有唯一的属名,为颜色向量命名,确保与fill映射的变量匹配
  • 使用viridis包生成高区分度的离散颜色(该包颜色对色弱人群友好,且颜色差异明显)
# 安装并加载所需包
install.packages("viridis")
library(ggplot2)
library(dplyr)
library(viridis)

# 获取数据中所有唯一属名,并生成对应命名的颜色向量
genus_levels <- unique(All$Genus)
genus_colors <- setNames(viridis(n = length(genus_levels)), genus_levels)

2. 调整图例布局,提升可读性

通过guide_legend设置图例的行列数、排列方式,结合theme调整图例位置、大小,提升空间利用率:


完整绘图代码

All %>% 
  ggplot(aes(x = Months, y = MeanMonth, fill = Genus)) +
  geom_bar(stat = "identity") +
  ggtitle("月度食蚜蝇属平均捕获数量") +
  # 应用自定义配色,绑定属名与颜色,设置图例布局
  scale_fill_manual(
    values = genus_colors,
    guide = guide_legend(
      ncol = 5,          # 设置图例为5列
      byrow = TRUE,      # 按行排列图例项
      title.position = "top", # 图例标题居上
      title.hjust = 0.5  # 图例标题居中
    )
  ) +
  labs(x = "月份", y = "食蚜蝇平均捕获数量") +
  theme(
    # 图例样式调整
    legend.key.size = unit(0.3, 'cm'),
    legend.key.height = unit(0.4, 'cm'),
    legend.text = element_text(size = 8),
    legend.position = "bottom", # 图例放置在底部,节省绘图空间
    legend.box = "vertical",
    # 标题与坐标轴样式优化
    plot.title = element_text(hjust = 0.5, size = 12),
    axis.title = element_text(size = 10)
  )

扩展说明

  • 若需按**物种(Species)**区分颜色,只需将代码中所有Genus替换为Species,重新生成species_levels和species_colors即可
  • 若偏好其他配色,可替换viridis(n = ...)为scales::hue_pal()(n = ...)或ggsci::pal_aaas()(n = ...)等专业配色函数

内容的提问来源于stack exchange,提问作者Teun V Griensven

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:43:12