我需要将通过将树状图切割到给定的相似性水平而产生的簇叠加到排序结果(NMDS)上。我一直在寻找ade4和素食主义者而没有找到任何明显的解决方案来解决这个问题。
我目前正在使用Primer-e(参见下面的屏幕截图),但我发现图形有点受限。非常感谢正确方向的任何一点。
答案 0 :(得分:4)
使用素食主义者这很容易,我有一个blog post可以详细解释其中一些内容,但不是关于群集的内容。
这是一个快速示例,我假设您可以将其转换为您正在使用的任何包/代码。
加载包和数据集
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
并注意到这一点现在为数据集中的每个样本(顶行)使用了集群成员资格(第2行)。
接下来适合NMDS
set.seed(2) ## setting a seed to make this reproducible
ord <- metaMDS(dune)
在这个示例中,我将根据群集成员身份对点进行着色,因此我需要定义颜色向量,每个群集一个
col <- c("red2", "green4", "mediumblue")
我现在可以使用grp
和col
为我绘制的每个点(样本)生成颜色名称向量,方法是使用col
索引到grp
。 E.g:
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")
此时数字看起来像下面那个
注意:素食主义者的高级plot()
方法是专门设计用于快速而肮脏地显示排序,因此不要接受颜色矢量或绘制字符。相反,我们希望您构建您的绘图流程较低级别的方法,例如我在此处使用的points()
方法。