微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

for循环不填充数据框以在ggplot中绘制椭圆

如何解决for循环不填充数据框以在ggplot中绘制椭圆

正在进行社区生态分析,并使用了 vegan 包中的 Metamds 函数来创建一组要绘制的点。我尝试按照前面的示例 Plotting ordiellipse function from vegan package onto NMDS plot created in ggplot2 但是,就我而言,for 循环未正确运行。这些是我的 nmds 分数:

gen_2019_site.scrs <- as.data.frame(scores(hel_gen_2019_nmds,display = "sites"))
gen_2019_site.scrs <- cbind(gen_2019_site.scrs,"Forest Coverage" = landscape_2019$Genera_2019_FQ)
gen_2019_site.scrs
Nmds1 Nmds2 Nmds3 森林覆盖
-0.01239620 -0.35564430 -0.3568236724 F3
0.36384679 -0.18408880 -0.0618107711 F1
-0.04411892 0.38898157 0.1333310873 F5
-0.30058417 0.03967635 0.0041468720 F2
0.03221559 -0.08918320 0.3013787345 F2
0.12416181 -0.16631897 0.1091838635 F1
-0.12732362 0.26747627 -0.2164860869 F1
0.02056514 -0.25946756 0.2799632995 F2
0.13859365 0.16943544 -0.2485090677 F3
0.18413252 -0.13721912 0.1782989227 F2
-0.25055749 0.30259844 0.0008892452 F4
0.39622215 0.34536077 -0.0881237834 F1
0.18078468 -0.10871097 0.0972200679 F1
0.28217778 -0.09857696 -0.3025316708 F4
-0.51108610 -0.18696202 -0.1046698976 F2
0.19347030 0.09482813 0.1153315154 F2
0.13955748 0.03051796 0.2791992925 F2
-0.56016509 -0.05928792 0.1780053536 F4
-0.04069194 0.11660629 -0.2203193485 F3
-0.05838748 0.20457427 0.0616040447 F2
0.05138256 0.01433274 0.0466866895 F2
-0.20692179 -0.39817145 -0.1074178632 F2
-0.09968087 0.04533097 -0.2597924682 F5
0.19142410 -0.24604250 0.0643757014 F2
-0.08662087 0.26995459 0.1168699402 F5

我根据前面的例子尝试的代码是:

gen_2019_Nmds = data.frame(mds1 = hel_gen_2019_nmds$points[,1],mds2 = hel_gen_2019_nmds$points[,2],group=gen_2019_site.scrs$`Forest Coverage`)
gen_2019_Nmds.mean=aggregate(gen_2019_Nmds[,1:2],list(group=gen_2019_Nmds$group),mean)
veganCovEllipse<-function (cov,center = c(0,0),scale = 1,npoints = 100) 
{
  theta <- (0:npoints) * 2 * pi/npoints
  Circle <- cbind(cos(theta),sin(theta))
  t(center + scale * t(Circle %*% chol(cov)))
}

df_ell.gen2019.forest <- data.frame()
for(g in levels(gen_2019_Nmds$group)){
  df_ell.gen2019.forest <- rbind(df_ell.gen2019.forest,cbind(as.data.frame(with(gen_2019_Nmds[gen_2019_Nmds$group==g,],veganCovEllipse(cov.wt(cbind(mds1,mds2),wt=rep(1/length(mds1),length(mds1)))$cov,center=c(mean(mds1),mean(mds2))))),group=g))
}

但是当我运行 for 循环以尝试获取绘制椭圆的数据时,它运行时没有错误或警告,但它仍然是一个具有 0 个变量的 0 obs 的对象。理想情况下,我想根据森林覆盖率水平绘制 5 个椭圆。

ggplot(gen_2019_site.scrs,aes(x=Nmds1,y=Nmds2))+ 
  geom_point(aes(Nmds1,Nmds2,colour = factor(`Forest Coverage`) ),size = 2)+ 
  geom_path(data=df_ell.gen2019.forest,y=Nmds2,colour=group),size=1,linetype=2)

但目前没有数据可以绘制 geom_path 代码。任何关于我在编码中哪里出错的建议将不胜感激!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。