我想使用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")
對於發佈抹殺人們的會話的代碼來說,這被認爲是非常粗魯的,所以我編輯了你的代碼來註釋掉該行。 – jlhoward 2014-11-04 21:28:50
謝謝,無意冒犯或打斷任何人的工作流程! – outside842 2014-11-04 21:30:40
@ outside842因此,學習如何開始一個乾淨的R會話,以便不需要'rm(list = ls(all = T))'垃圾。 – 2014-11-06 22:49:40