1

作業中のデータに対して ggplot2 を使用して、NMDS 調整プロットを作成したいと考えています。ここにある以前のスタック オーバーフロー スレッドからこれを行う方法の優れた例があります: Plotting ordellipse function from vegan package on NMDS plot created in ggplot2

この関数をこの前のスレッドからコピーして、データに使用しようとしました。ただし、関数を R に渡すと、次のエラー メッセージが表示されます。

array(x, c(length(x), 1L) のエラー、if (!is.null(names(x))) list(names(x), : 'data' はベクトル型でなければなりませんが、'NULL でした'

Vegan パッケージで提供されている砂丘データセットに対して機能する関数を取得できますが、独自のデータセットで障害にぶつかりました。誰にも考えやアイデアはありますか?以下にデータセットへのリンクを提供し、コードも下に貼り付けました。

データを見ることができます: https://docs.google.com/spreadsheets/d/1O2YCapLaCMlCco3-0mZ07_KoJPTfWdjWYudLvMd183Y/edit?usp=sharing

コード:

# rm(list=ls(all=T))
setwd('C:')
library(vegan)
library(ggplot2)

PCBprop<-read.csv("PCBprop_stackoverflow.csv", header=T)
#Subset to just Lake Michigan Observation
MICH<-PCBprop[with(PCBprop, BASIN=="MICHIGAN"),]
#MICHIGAN
michcovariate<-MICH[,c(1,2)]#covariate data
michcongener<- MICH[,3:60]# PCB congener data
michpcbnmds <- metaMDS(michcongener, k = 2, distance ='bray', autotransform = TRUE, trymax=500) 
score<-scores(michpcbnmds)
nmdsscores<-data.frame(cbind(michcovariate,score))
plot(michpcbnmds$points, col = nmdsscores$CAT2) #Basic ordination plot from Vegan
ord<-ordiellipse(michpcbnmds, nmdsscores$CAT2, display = "sites", kind = "se", conf = 0.95, label        = T) #95% ellipses on plot

#Ordiellipse Graph
NMDS = data.frame(NMDS1 = nmdsscores$NMDS1, NMDS2=nmdsscores$NMDS2, group=nmdsscores$CAT2)#sets up data frame 
df_ell <- data.frame()
for(g in levels(NMDS$group)){
df_ell <- rbind(df_ell, cbind(as.data.frame(with(NMDS[NMDS$group==g,],
                                                  vegan:::veganCovEllipse(ord[[g]]$cov,ord[[g]]$center,ord[[g]]$scale))) ,group=g))}



g1<-ggplot(data = NMDS, aes(NMDS1, NMDS2)) + geom_point(aes(color = group), size=1.5) +
geom_path(data=df_ell, aes(x=NMDS1, y=NMDS2,colour=group), size=1.5, linetype=2) +
scale_colour_brewer(palette="Dark2", name="Species_Location")
4

1 に答える 1