我需要将通过将树状图切割成给定的相似性水平而生成的集群覆盖到排序结果(NMDS)上。我一直在浏览 ade4 和 vegan,但没有找到任何明显的解决方案。
我目前正在使用 Primer-e(见下面的屏幕截图),但我发现图形有点有限。非常感谢正确方向的任何一点。
我需要将通过将树状图切割成给定的相似性水平而生成的集群覆盖到排序结果(NMDS)上。我一直在浏览 ade4 和 vegan,但没有找到任何明显的解决方案。
我目前正在使用 Primer-e(见下面的屏幕截图),但我发现图形有点有限。非常感谢正确方向的任何一点。
素食主义者很容易做到这一点,我有一篇博文详细解释了其中的一些内容,但没有关于集群的部分内容。
这是一个简单的示例,我假设您可以将其转换为您正在使用的任何包/代码。
加载包和数据集
require(vegan)
data(dune)
计算相异矩阵并对其进行聚类,将树状图切割为 3 组
dij <- vegdist(dune) ## bray curtis dissimilarity
clu <- hclust(dij, method = "average")
grp <- cutree(clu, 3)
看着grp
R> grp
2 13 4 16 6 1 8 5 17 15 10 11 9 18 3 20 14 19 12 7
1 1 1 2 1 1 1 1 3 2 1 1 1 1 1 2 2 3 1 1
请注意,这现在为数据集中的每个样本(第一行)提供了集群成员资格(第二行)。
接下来适合 NMDS
set.seed(2) ## setting a seed to make this reproducible
ord <- metaMDS(dune)
在这个例子中,我将根据集群成员为点着色,所以我需要定义一个颜色向量,每个集群一个
col <- c("red2", "green4", "mediumblue")
我现在可以使用grp
和col
为我绘制的每个点(样本)生成一个颜色名称向量,方法是索引col
using grp
。例如:
R> col[grp]
[1] "red2" "red2" "red2" "green4" "red2"
[6] "red2" "red2" "red2" "mediumblue" "green4"
[11] "red2" "red2" "red2" "red2" "red2"
[16] "green4" "green4" "mediumblue" "red2" "red2"
剩下的就是绘制 NMDS 排序并添加点和图例。我抑制了调用中的任何绘图,plot()
因此我可以更好地控制在下一行中添加点。第三行只是添加了一个图例。
plot(ord, type = "n", display = "sites")
points(ord, col = col[grp], bg = col[grp], pch = 21)
legend("topright", legend = paste("Cluster", 1:3),
col = col, pt.bg = col, bty = "n", pch = 21)
结果图应如下所示:
更新:要将每个点簇的凸包添加到排序图中,您可以使用该ordihull()
函数。继续上面的例子,我们添加凸包如下
ordihull(ord, groups = grp, display = "sites")
在这一点上,该图将如下图所示
注意:vegan的高级plot()
方法是专门为快速而肮脏地显示排序而设计的,因此不接受颜色向量或绘制字符。相反,我们希望您建立您的绘图流程较低级别的方法,例如points()
我在这里使用的方法。