像ggplot中的群集与nmds?

我刚刚成功地在我的非公制多维尺度图上成功绘制了绘制和ordisurf模型。 代码是从这个网站使用的。 https://oliviarata.wordpress.com/2014/07/17/ordinations-in-ggplot2-v2-ordisurf/

然而,我的问题是,我很难想出如何使用ggplot绘制集群图形。 我环顾四周,最接近我是这样的:R - 添加质心散点图

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

我用纯素来运行我的nmds和gpplot进行绘图。 我会添加我的数据,但它由两个非常大的社区和环境数据集组成。 nmds和后续的ordisurf函数需要运行完整的数据。


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

library('vegan')
library('ggplot2')

在这个例子中,我将使用荷兰沙丘草甸数据集与纯素船舶

data(dune, dune.env)

我将使用dune.envManagement变量作为我的集群成员资格向量。 注意它被编码为一个因素; 你应该确保你使用的任何集群成员矢量都被编码。

首先是榜样排序

ord <- metaMDS(dune)

接下来,提取NMDS得分

scrs <- scores(ord, display = 'sites')

为了便于计算质心,我将Management作为变量添加到分数数据框中

scrs <- cbind(as.data.frame(scrs), Management = dune.env$Management)

现在我们计算群组质心,它是每个轴上的平均坐标,分组:

cent <- aggregate(cbind(NMDS1, NMDS2) ~ Management, data = scrs, FUN = mean)

为了绘制蜘蛛,我们需要geom_segment() ,它需要geom_segment()来绘制段和。 我们的坐标, xendyend美学将成为质心。 所以我们需要复制组中的每个观察组的质心。 这通过merge左连接来实现:

segs <- merge(scrs, setNames(cent, c('Management','oNMDS1','oNMDS2')),
              by = 'Management', sort = FALSE)

请注意,我重命名列cent所以这些do't混淆在同一名称的列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包中使用gg_envfit函数ggordiplots(https://github.com/jfq3/ggordiplots)。 在john-quensen.com的GitHub页面上有包文档和短片的链接。 软件包中的所有功能默默返回可用于制作自己的绘图修改的数据帧。 包括这样做的小插曲。

链接地址: http://www.djcxy.com/p/30903.html

上一篇: like clusters in ggplot with nmds?

下一篇: ggplot2 code runs and updates plot but no data actually shows up