2014-11-04 43 views
0

我想使用ggplot2为我正在处理的一些数据制作一个NMDS协调图。有一个很好的例子,说明如何从以前的堆栈溢出线程中找到这个:Plotting ordiellipse function from vegan package onto NMDS plot created in ggplot2从ggplot2素食包中绘制ordiellipse

我试图从这个前面的线程中复制这个函数并用于我的数据。但是,我将函数传递给R后遇到以下错误消息:

数组(x,c(length(x),1L)中的错误,if(!is.null(names(x)) )列表(名称(x),: 'data'必须是向量类型,为'NULL'

我可以获得为素食单包提供的沙丘数据集工作的功能,但遇到了阻碍。我自己的数据集的任何人有任何想法或意见我提供下面我的数据集的链接,并粘贴下面还有我的代码

的数据可以看出:? 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") 
+0

对于发布抹杀人们的会话的代码来说,这被认为是非常粗鲁的,所以我编辑了你的代码来注释掉该行。 – jlhoward 2014-11-04 21:28:50

+0

谢谢,无意冒犯或打断任何人的工作流程! – outside842 2014-11-04 21:30:40

+0

@ outside842因此,学习如何开始一个干净的R会话,以便不需要'rm(list = ls(all = T))'垃圾。 – 2014-11-06 22:49:40

回答

1

喜欢这个?

的问题是,对于ord[[g]] = NULL的基团之一(BND_NO)。这可能是因为当BASIN==MICHIGAN时,该组只有2行数据,并且不足以产生95%置信度椭圆。

我添加下面一行在你的循环的开头:

if(is.null(ord[[g]])) next 

产生上述情节。

+0

是的,就是这样!非常感谢。 – outside842 2014-11-04 22:06:39

+0

你*必须*使用'coord_fixed()'与协调图。 – 2014-11-06 22:51:39