【问题标题】:accumulation curve in RR中的累积曲线
【发布时间】:2014-02-06 22:39:09
【问题描述】:

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

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

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

例如,我加载了我的一个网站“FMR”的数据。然后我做了以下事情:

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

我对我的其他网站 PP、DUX、PM 也做了同样的事情。如何将所有 4 行放在一个情节上?

【问题讨论】:

  • x 和y 坐标分别存储在列表元素FMR$sites 和FMR$richness 中。 sd 位于 FMR$sd 中。您可以手动绘制这些,用plot 绘制第一个系列,用lines 绘制后续系列。

标签: r plot vegan


【解决方案1】:

您可以在plot.specaccum(...) 中使用add=T 参数

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)

此代码 sn-p 仅加载 vegan 中的内置 BSI 数据集,并通过在 BCI 中的列子集上运行 specaccum(...) 创建一个包含 5specaccum 对象的列表。你不需要这样做,因为你已经有了 specaccum 对象。

然后,我们创建第一个图,并使用add=T 添加每条新曲线。

【讨论】:

    【解决方案2】:

    好的,所以@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')
    

    绘图

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

    【讨论】:

      猜你喜欢
      • 2020-06-13
      • 2021-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多