R 将聚类结果叠加到排序上

R 将聚类结果叠加到排序上,r,cluster-analysis,hclust,vegan,R,Cluster Analysis,Hclust,Vegan,我需要在排序结果(NMDS)上叠加从给定相似度的树状图切割生成的聚类。我一直在研究ade4和素食主义者,但没有找到任何明显的解决方案 我目前正在使用Primer-e(见下面的屏幕截图),但我发现图形有点有限。在正确的方向上的任何一点都是非常值得赞赏的 这对于纯素食者来说非常容易,我有一个例子详细解释了其中的一些,但没有关于聚类的部分 这里是一个简单的例子,我假设您可以将其转换为您正在使用的任何包/代码 加载包和数据集 require(vegan) data(dune) 计算相异矩阵并对其进行聚

我需要在排序结果(NMDS)上叠加从给定相似度的树状图切割生成的聚类。我一直在研究ade4和素食主义者,但没有找到任何明显的解决方案

我目前正在使用Primer-e(见下面的屏幕截图),但我发现图形有点有限。在正确的方向上的任何一点都是非常值得赞赏的


这对于纯素食者来说非常容易,我有一个例子详细解释了其中的一些,但没有关于聚类的部分

这里是一个简单的例子,我假设您可以将其转换为您正在使用的任何包/代码

加载包和数据集

require(vegan)
data(dune)
计算相异矩阵并对其进行聚类,切割树状图,得到3组

dij <- vegdist(dune) ## bray curtis dissimilarity
clu <- hclust(dij, method = "average")
grp <- cutree(clu, 3)
请注意,现在可以为数据集中的每个样本(顶行)使用集群成员资格(第二行)

下一步,安装nmd

set.seed(2) ## setting a seed to make this reproducible
ord <- metaMDS(dune)
剩下的就是绘制国家导弹防御系统,并添加点和图例。我在
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)
结果图应如下所示:


更新:要为排序图中的每个点簇添加凸面外壳,可以使用
ordishull()
函数。继续上面的示例,我们添加凸面外壳,如下所示

ordihull(ord, groups = grp, display = "sites")
在这一点上,该图将与下面的图相似



注意素食者的更高层次的
plot()
方法是专门设计的,目的是快速、肮脏地显示排序结果,因此;不接受颜色向量或打印字符。相反,我们希望您建立您的绘图流低级方法,例如我在这里使用的
points()
方法。

感谢您的出色回答!我只是想知道……在Primer中,有可能用一个边界(见上面的屏幕截图)将集群的成员包围起来,从而“保存”颜色和点形状,以传达环境数据。这是否可能使用素食主义者?是的,请参阅
?或
。我再举个例子,太棒了!再次感谢您的帮助,也感谢您维护一个伟大的r软件包。漂亮的解决方案!非常感谢。我改变了显示标签的方式,因此使用了
文本(ord,col=col[grp],labels=rownames(ord))
而不是
点。
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"
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(ord, groups = grp, display = "sites")