accumulation curve in R

狂风中的少年 提交于 2019-11-30 23:24:53

You can just use the add=T argument in plot.specaccum(...)

library(vegan)
data(BCI) 
df <- lapply(c(1,21,41,61,81),function(i)specaccum(BCI[,seq(i,i+19)], method="random"))
plot(df[[1]])
for (i in 2:5) plot(df[[i]],add=T, col=i)

This code snippet just loads the built-in BSI dataset in vegan, and creates a list of 5specaccum objects by running specaccum(...) on a subset of the columns in BCI. You don't need to to this since you already have the specaccum objects.

Then, we create the first plot, and add each new curve with add=T.

Ok, so @jlhoward's solution is of course much simpler, and more sensible. But, since I hadn't thought of the obvious, and coded this up, I figured I may as well share it. It might be useful for related questions where the function at hand doesn't accept add.

Load library and some example data:

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')

Plotting

# 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)

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!