如何解决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 举报,一经查实,本站将立刻删除。