R 使用ggplot2从素食套餐中绘制椭圆

R 使用ggplot2从素食套餐中绘制椭圆,r,ggplot2,vegan,R,Ggplot2,Vegan,我想用ggplot2为我正在处理的一些数据绘制一个NMDS排序图。这里有一个很好的例子说明了如何从以前的堆栈溢出线程中执行此操作: 我已尝试从上一个线程复制此函数并用于我的数据。但是,在将函数传递给R后,我遇到以下错误消息: 数组(x,c(长度(x),1L)中的错误,如果(!is.null(名称(x)))列表(名称(x)): “数据”必须是向量类型,为“NULL” 我可以让该函数为纯素软件包提供的沙丘数据集工作,但我自己的数据集遇到了障碍。有人有任何想法或想法吗?我在下面提供了一个指向我的数据集

我想用ggplot2为我正在处理的一些数据绘制一个NMDS排序图。这里有一个很好的例子说明了如何从以前的堆栈溢出线程中执行此操作:

我已尝试从上一个线程复制此函数并用于我的数据。但是,在将函数传递给R后,我遇到以下错误消息:

数组(x,c(长度(x),1L)中的错误,如果(!is.null(名称(x)))列表(名称(x)): “数据”必须是向量类型,为“NULL”

我可以让该函数为纯素软件包提供的沙丘数据集工作,但我自己的数据集遇到了障碍。有人有任何想法或想法吗?我在下面提供了一个指向我的数据集的链接,并在下面粘贴了我的代码

数据如下:

代码:

# 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")
#rm(list=ls(all=T))
setwd('C:')
图书馆(素食主义者)
图书馆(GG2)
像这样吗

问题是其中一组(
BND_NO
)的
ord[[g]]]=NULL
。这可能是因为当
BASIN==MICHIGAN
时,该组只有2行数据,这不足以生成95%的置信椭圆

我在循环的开头添加了以下行:

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

生成上面的绘图。

在SO上发布清除用户会话的代码被认为是非常不礼貌的,所以我编辑了您的代码以注释掉这一行。谢谢,无意冒犯或中断任何人的工作流程!@outside842所以请学习如何启动干净的R会话,这样您就不需要
rm(list=ls(all=t))
垃圾。是的,就像那样!非常感谢。您必须使用排序图的
coord_fixed()