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

如何按各年度因变量前50%分位数筛选数据适配ggplot facet_wrap展示

解决方案

你只需要调整分组逻辑即可实现按年度单独计算分位数的需求,修改后代码如下:

Data <- All_years %>%
  # 汇总每个物种对应年度的总丰度
  group_by(Species, Year) %>%
  summarise(Abundance = sum(Abundance, na.rm = TRUE), .groups = "drop") %>%
  # 切换为按年度分组,分年度计算50%分位数筛选
  group_by(Year) %>%
  filter(
    Abundance > quantile(Abundance, 0.5),
    Abundance > 50
  ) %>%
  ungroup()

原代码问题说明

你之前的代码在group_by(Species, Year)做汇总后,dplyr会默认脱落最后一层分组(也就是Year),剩下的分组维度是Species,此时计算的分位数是单个物种跨所有年度的丰度分位数,自然不是你要的按年度单独统计的结果。
调整为汇总后重新按Year分组后,quantile函数会在每个年度的物种丰度数据集内单独计算50%分位数,筛选出来的就是每个年度内丰度排在前50%的物种数据。

后续绘图示例

处理好的数据可以直接传入ggplot做分面展示:

library(ggplot2)
ggplot(Data, aes(x = Abundance, y = reorder(Species, Abundance))) +
  geom_bar(stat = "identity") +
  facet_wrap(~Year, scales = "free_y") +
  labs(y = "物种名称", x = "丰度")

如果需要调整分面的坐标轴是否共用,可以修改facet_wrap的scales参数,可选值为"fixed"/"free_x"/"free_y"/"free"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 19:15:03