如何按各年度因变量前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
相关产品推荐
相关产品推荐

