R 如何使用nmd在ggplot中获得类似蜘蛛的集群?

R 如何使用nmd在ggplot中获得类似蜘蛛的集群?,r,plot,ggplot2,vegan,R,Plot,Ggplot2,Vegan,我刚刚成功地在我的非度量多维比例图上绘制并使用模型。 代码是从该站点使用的。 然而,我的问题是,我很难找出如何使用ggplot绘制集群图形。我环顾四周,最接近的是: 答案涉及到创建质心和将线从质心延伸到点,但这不是用nmds对象完成的,所以我仍然感到困惑 我使用vegan运行nmds和gpplot进行绘图。 我会添加我的数据,但它由两个非常大的社区和环境数据集组成。nmds和随后的ORDSURF功能需要运行完整的数据。这里有一种方法可以做到这一点,它应该在某个时候进入我的ggvegan软件包

我刚刚成功地在我的非度量多维比例图上绘制并使用模型。 代码是从该站点使用的。

然而,我的问题是,我很难找出如何使用ggplot绘制集群图形。我环顾四周,最接近的是:

答案涉及到创建质心和将线从质心延伸到点,但这不是用nmds对象完成的,所以我仍然感到困惑

我使用vegan运行nmds和gpplot进行绘图。
我会添加我的数据,但它由两个非常大的社区和环境数据集组成。nmds和随后的ORDSURF功能需要运行完整的数据。

这里有一种方法可以做到这一点,它应该在某个时候进入我的ggvegan软件包

library('vegan')
library('ggplot2')
在这个例子中,我将使用荷兰沙丘草地数据集,该数据集与素食主义者一起发布

data(dune, dune.env)
我将使用
dune.env
中的
Management
变量作为集群成员向量。注意,它被编码为一个因子;您应该确保您使用的任何集群成员身份向量都是同样编码的

首先是排序的例子

ord <- metaMDS(dune)
现在我们计算组质心,即每个轴上的平均坐标,按组计算:

cent <- aggregate(cbind(NMDS1, NMDS2) ~ Management, data = scrs, FUN = mean)
请注意,我重命名了
cent
中的列,这样就不会将它们与
scrs
中同名的列混淆-我们希望这些形心变量具有不同的名称

现在我们可以策划了

ggplot(scrs, aes(x = NMDS1, y = NMDS2, colour = Management)) +
  geom_segment(data = segs,
               mapping = aes(xend = oNMDS1, yend = oNMDS2)) + # spiders
  geom_point(data = cent, size = 5) +                         # centroids
  geom_point() +                                              # sample scores
  coord_fixed()                                               # same axis scaling
产生


您可以在GitHub包ggordiclots()中使用gg_envfit函数。john-quensen.com的GitHub页面上有到包文档和小故事的链接。包中的所有函数都以静默方式返回数据帧,您可以使用这些数据帧进行自己的绘图修改。其中包含了一个这样做的小插曲。

如果您提供了一些示例输入数据和您已经尝试过的代码,将更容易为您提供帮助。请准确描述您陷入困境的地方。我无法描述,因为对数据进行子集处理将导致不同的mds对象,从而导致完全不同的NMD。还需要环境数据。我已经尝试附加数据帧的dput()版本,但由于字符限制,甚至无法安装第一个数据帧
cent <- aggregate(cbind(NMDS1, NMDS2) ~ Management, data = scrs, FUN = mean)
segs <- merge(scrs, setNames(cent, c('Management','oNMDS1','oNMDS2')),
              by = 'Management', sort = FALSE)
ggplot(scrs, aes(x = NMDS1, y = NMDS2, colour = Management)) +
  geom_segment(data = segs,
               mapping = aes(xend = oNMDS1, yend = oNMDS2)) + # spiders
  geom_point(data = cent, size = 5) +                         # centroids
  geom_point() +                                              # sample scores
  coord_fixed()                                               # same axis scaling