繁体   English   中英

R图基于k的上部树状图

[英]R plot upper dendrogram based on k

我正在使用hclust()基于R中的20,000行x 169列数据集对距离矩阵进行聚类。 当我将簇对象转换为树形图并绘制整个树形图时,很难读取它,因为它太大了,即使我将它输出到相当大的pdf。

df <- as.data.frame(matrix(abs(rnorm(3380000)), nrow = 20000))
mydist <- vegdist(df)
my.hc <- hclust(mydist, method = "average")
hcd <- as.dendrogram(my.hc)

pdf("hclust_plot.pdf", width = 40, height = 15)
plot(hcd)
dev.off()

我想指定截断树形图的簇数(k),然后仅绘制在k个分裂点上方的树形图的上部。 我知道我可以使用函数cut()指定高度(h)来绘制上半部分。

pdf("hclust_plot2.pdf", width = 40, height = 15)
plot(cut(hcd, h = 0.99)$upper)
dev.off()

我也知道我可以使用dendextend包为k组的树状图绘制颜色。

library(dendextend)
pdf("hclust_plot3.pdf", width = 40, height = 15)
plot(color_branches(hcd, k = 44))
dev.off()

但对于我的数据集,这个树形图太密集,甚至无法读取哪个组是哪种颜色。 有没有办法通过指定k而不是h来仅在切割点上方绘制树形图的上半部分? 或者有一种方法来获得树形图的h值,给定k?

您可以使用dendextend包中heights_per_k.dendrogram函数来获得各种k切割的高度。

例如:

## Not run: 
hc <- hclust(dist(USArrests[1:4,]), "ave")
dend <- as.dendrogram(hc)

library(dendextend)
dend_h <- heights_per_k.dendrogram(dend)
par(mfrow = c(1,2))
plot(dend)
plot(dend, ylim = c(dend_h["3"], dend_h["1"]))

在此输入图像描述

在你的情况下:

set.seed(2016-01-16)
df <- as.data.frame(matrix(abs(rnorm(2*20000)), nrow = 20000))
mydist <- dist(df)
my.hc <- hclust(mydist, method = "average")
hcd <- as.dendrogram(my.hc)

library(dendextend)
library(dendextendRcpp)
dend_h <- heights_per_k.dendrogram(hcd) # (this can take some time)
plot(hcd, ylim = c(dend_h["43"], dend_h["1"]))

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM