簡體   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