4

数か月にわたる 4 つのサイトの種のデータがあります。R のパッケージを使用して累積グラフを正常に作成しましたがvegan、4 つのサイトすべてを 1 つのグラフにプロットしたいと考えています。

最初はすべてのサイトと月のデータ シートがありましたがspecaccum、結果をプロットすると、サイトに関係なくすべてのデータの累積曲線でした。

このため、各サイトを個別のデータ シートに分割し、R にロードしました。各データ シートの最初の行は種名で、その下の追加の各行は月です。

たとえば、私のサイトの 1 つ「FMR」のデータをロードしました。次に、次のことを行いました。

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

他のサイトについても同じことを行いましたPP, DUX, PM. 4行すべてを1つのプロットに配置するにはどうすればよいですか?

4

2 に答える 2

5

add=Tで引数を使用できます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)

このコード スニペットは、組み込みの BSI データセットを にロードするだけで、BCI の列のサブセットで実行して 5 つのオブジェクトveganのリストを作成します。すでに specaccum オブジェクトがあるため、これを行う必要はありません。specaccumspecaccum(...)

次に、最初のプロットを作成し、それぞれの新しい曲線を で追加しadd=Tます。

于 2014-02-07T00:15:08.197 に答える
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)

ここに画像の説明を入力

于 2014-02-07T00:27:59.930 に答える