【问题标题】:how to get ordispider-like clusters in ggplot with nmds?如何使用 nmds 在 ggplot 中获得类似 ordispider 的集群?
【发布时间】:2017-11-27 17:16:50
【问题描述】:

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

但是我的问题是我很难弄清楚如何使用 ggplot 绘制集群图形。我环顾四周,最接近的是: R - add centroids to scatter plot

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

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

【问题讨论】:

  • 如果您向reproducible example 提供一些示例输入数据和您已经尝试过的代码,会更容易为您提供帮助。准确描述您遇到困难的地方。
  • 我不能这样做,因为子集数据会导致不同的 mds 对象,因此完全不同的 nmds。还需要环境数据。我已经尝试附加数据帧的 dput() 版本,但由于字符限制,甚至无法放入第一个版本

标签: r plot ggplot2 vegan


【解决方案1】:

这是执行此操作的一种方法,它应该会在某个时候进入我的 ggvegan 包中。

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

在这个例子中,我将使用 vegan 附带的荷兰沙丘草地数据集

data(dune, dune.env)

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

先例举戒

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(),这需要坐标来绘制线段fromto。我们的 to 坐标,xendyend 美学将是质心。所以我们需要为组中的每个观察复制组质心。我们通过merge 左连接来促进这一点:

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

请注意,我重命名了 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

哪个产生

【讨论】:

    【解决方案2】:

    您可以使用 GitHub 包 ggordiplots (https://github.com/jfq3/ggordiplots) 中的 gg_envfit 函数。在 john-quensen.com 的 GitHub 页面上有包文档和小插图的链接。包中的所有函数都会静默返回数据框,您可以使用这些数据框进行自己的绘图修改。包括这样做的小插曲。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-04
      相关资源
      最近更新 更多