我需要将根据给定级别的相似度切割树形图生成的聚类覆盖到排序结果(NMDS)上。我一直在寻找通过ade4和素食主义者,没有找到任何明显的解决方案来解决这个问题。在排序上叠加聚类结果
我目前正在使用Primer-e(见下面的屏幕截图),但我发现图形有点有限。任何正确的方向非常感谢。
我需要将根据给定级别的相似度切割树形图生成的聚类覆盖到排序结果(NMDS)上。我一直在寻找通过ade4和素食主义者,没有找到任何明显的解决方案来解决这个问题。在排序上叠加聚类结果
我目前正在使用Primer-e(见下面的屏幕截图),但我发现图形有点有限。任何正确的方向非常感谢。
这是素食主义者很容易的,我有一个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行)数据集中的p行)。
接下来装NMDS
set.seed(2) ## setting a seed to make this reproducible
ord <- metaMDS(dune)
在这个例子中我将根据集群成员资格着色点,所以我需要定义的颜色矢量,每个群集一个
col <- c("red2", "green4", "mediumblue")
我现在可以使用grp
和col
为我绘制的每个点(样本)绘制颜色名称向量,使用grp
索引到col
。例如:
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()
的目的是为了给出一种快速和肮脏的协调表现,并且不会接受v颜色或绘制角色的人。相反,我们希望你建立你的绘图流程较低层次的方法,例如我在这里使用的points()
。
谢谢你的出色答案!我只是想知道......在底漆中,可以用一个边界(见上面的屏幕截图)包围一个聚类的成员,从而“保存”颜色和点形状,以表达环境数据。这可能使用素食主义者吗? – Elizabeth
是的,见'ordihull'。我会添加一个例子。 –
太棒了!再次感谢您的帮助,也感谢您维护一个很棒的软件包。 – Elizabeth