R中的累积曲线

R中的累积曲线,r,plot,vegan,R,Plot,Vegan,我有几个月内4个地点的物种数据。我已经使用R中的packagevegan成功创建了累积图,但我想在一个图上绘制所有4个站点 起初,我有一份包含所有地点和月份的数据表,但当我绘制specaccum时,结果是所有数据的累积曲线,无论地点如何 因此,我将每个站点拆分为一个单独的数据表,并将其加载到R中。在每个数据表中,第一行是物种名称,下面的每一行是一个月 例如,我加载了我的一个站点“FMR”的数据。然后我做了以下工作: FMR <-specaccum(FMRJ2F, "random") plo

我有几个月内4个地点的物种数据。我已经使用R中的package
vegan
成功创建了累积图,但我想在一个图上绘制所有4个站点

起初,我有一份包含所有地点和月份的数据表,但当我绘制
specaccum
时,结果是所有数据的累积曲线,无论地点如何

因此,我将每个站点拆分为一个单独的数据表,并将其加载到R中。在每个数据表中,第一行是物种名称,下面的每一行是一个月

例如,我加载了我的一个站点“FMR”的数据。然后我做了以下工作:

FMR <-specaccum(FMRJ2F, "random")
plot(FMR)

FMR您可以在
plot.specaccum(…)

library(素食主义者)
数据(BCI)

df好的,所以@jlhoward的解决方案当然更简单、更明智。但是,由于我没有想到显而易见的东西,并将其编码,我想我还是分享一下吧。对于手头的函数不接受
add
的相关问题,它可能很有用

加载库和一些示例数据:

library(vegan)
data(BCI)
sp1 <- specaccum(BCI, 'random')

# random modification to BCI data to create data for a second curve
BCI2 <- as.matrix(BCI)
BCI2[sample(prod(dim(BCI2)), 10000)] <- 0
sp2 <- specaccum(BCI2, 'random')
library(素食主义者)
数据(BCI)

sp1
x
y
坐标分别存储在列表元素
FMR$sites
FMR$richness
中。
sd
位于
FMR$sd
中。您可以手动绘制这些图形,使用
绘图绘制第一个系列
,使用
绘制后续系列。
library(vegan)
data(BCI)
sp1 <- specaccum(BCI, 'random')

# random modification to BCI data to create data for a second curve
BCI2 <- as.matrix(BCI)
BCI2[sample(prod(dim(BCI2)), 10000)] <- 0
sp2 <- specaccum(BCI2, 'random')
# Combine the specaccum objects into a list 
l <- list(sp1, sp2) 

# Calculate required y-axis limits
ylm <- range(sapply(l, '[[', 'richness') + 
           sapply(l, '[[', 'sd') * c(-2, 2))

# Apply a plotting function over the indices of the list
sapply(seq_along(l), function(i) {
  if (i==1) { # If it's the first list element, use plot()
    with(l[[i]], {
      plot(sites, richness, type='l', ylim=ylm, 
           xlab='Sites', ylab='random', las=1)
      segments(seq_len(max(sites)), y0=richness - 2*sd, 
               y1=richness + 2*sd)
    })    
  } else {
    with(l[[i]], { # for subsequent elements, use lines()
      lines(sites, richness, col=i)
      segments(seq_len(max(sites)), y0=richness - 2*sd, 
               y1=richness + 2*sd, col=i)
    })     
  }
})

legend('bottomright', c('Site 1', 'Site 2'), col=1:2, lty=1, 
       bty='n', inset=0.025)