如何绘制无竖线的物种累积曲线并合并多组曲线?
解决物种累积曲线的阴影置信区间与多曲线合并问题
核心思路
利用vegan包的specaccum生成累积曲线对象后,提取每个曲线的均值、置信区间数据,再用ggplot2绘制带阴影置信区间的多曲线合并图(比base绘图更灵活)。以下是可复现代码,你可以直接替换成自己的数据集:
步骤1:加载包并构造示例数据(替换为你的真实数据)
library(vegan) library(ggplot2) # 模拟分组物种丰度数据(你可以替换成自己的dataframe,确保分组列和物种列分离) set.seed(123) df <- data.frame( Group = rep(c("森林", "草地", "湿地"), each = 10), # 你的分组变量 matrix(rpois(30*15, lambda = 2), nrow = 30, ncol = 15, dimnames = list(NULL, paste0("物种", 1:15))) # 物种丰度列 ) # 按分组拆分物种数据 group_data_list <- split(df[, -1], df$Group)
步骤2:生成各组的物种累积曲线对象
# 对每个分组生成随机重抽样的物种累积曲线 sa_objects <- lapply(group_data_list, function(x) specaccum(x, method = "random"))
步骤3:提取绘图所需数据(均值+置信区间)
# 提取每个曲线的样方数、物种丰富度均值、置信区间(这里用标准差,可替换为95%CI) plot_data_list <- lapply(names(sa_objects), function(group_name) { sa <- sa_objects[[group_name]] data.frame( 样方数 = sa$sites, 物种丰富度 = sa$richness, 置信下限 = sa$richness - sa$sd, 置信上限 = sa$richness + sa$sd, 分组 = group_name ) }) # 合并成一个绘图数据框 plot_data <- do.call(rbind, plot_data_list)
步骤4:绘制带阴影置信区间的合并曲线
ggplot(plot_data, aes(x = 样方数, y = 物种丰富度, color = 分组)) + # 绘制阴影置信区间,alpha控制透明度,color=NA去除阴影边框 geom_ribbon(aes(ymin = 置信下限, ymax = 置信上限, fill = 分组), alpha = 0.2, color = NA) + # 绘制累积曲线 geom_line(linewidth = 1) + # 设置标签和主题 labs(x = "采样样方数量", y = "物种丰富度", title = "不同生境的物种累积曲线") + theme_bw() + theme(legend.title = element_blank(), legend.position = "right")
可选调整
- 若需要95%置信区间,替换置信上下限的计算:
置信下限 = sa$richness - qt(0.975, sa$n-1)*sa$se 置信上限 = sa$richness + qt(0.975, sa$n-1)*sa$se - 如果偏好base绘图,可通过
polygon()函数手动绘制阴影区域,但多曲线管理不如ggplot便捷。
内容的提问来源于stack exchange,提问作者YvonneS
相关产品推荐
相关产品推荐

