标签: dendrogram

绘制带有悬挂叶子的水平树状图?(右)

我想创建一个带有水平标签的树状图,但让叶子根据其高度悬挂,而不是仅仅掉落到图的边缘。

例子:

par(mfrow = c(1,2))
hc <- hclust(dist(USArrests), "ave")
plot(hc) # a plot with hanging branches
plot(as.dendrogram(hc), horiz = TRUE) # a horizontal plot, but the branches are not hanging
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

关于如何编程有什么建议吗?

谢谢。

r dendrogram hclust dendextend

5
推荐指数
1
解决办法
3721
查看次数

在 R 中创建 PDF 时 plot.new() 出错

在 R 中绘制树状图时,我遇到了一个我以前从未见过的有趣错误。

Error in plot.new() : 
  cannot open file 'C:\Users\Sun\AppData\Local\Temp\RtmpKSRNuD\pdf12207aa37548', reason No such file or directory
Run Code Online (Sandbox Code Playgroud)

昨天在绘制其他树状图并将其保存在 PDF 文件中时,我没有出现该错误.. 知道这意味着什么吗?

pdf r dendrogram

5
推荐指数
1
解决办法
5113
查看次数

从 hclust(分层聚类)对象中提取距离

我想计算我的聚类分析解决方案对实际距离分数的拟合程度。为此,我需要提取我正在聚类的刺激之间的距离。我知道在查看 树状图时我可以提取距离,例如 5 到 -14 之间的距离是 0.219(它们连接处的高度),但是是否有一种自动方法可以从 hclust 中的信息中提取距离目的?

List of 7
 $ merge      : int [1:14, 1:2] -5 -1 -6 -4 -10 -2 1 -9 -12 -3 ...
 $ height     : num [1:14] 0.219 0.228 0.245 0.266 0.31 ...
 $ order      : int [1:15] 3 11 5 14 4 1 8 12 10 15 ...
 $ labels     : chr [1:15] "1" "2" "3" "4" ...
 $ method     : chr "ward.D"
 $ call       : language hclust(d = as.dist(full_naive_eucAll, diag …
Run Code Online (Sandbox Code Playgroud)

r dendrogram hclust dendextend

5
推荐指数
1
解决办法
2059
查看次数

在距离高度处从 SciPy 切割树状图/聚类树

我正在尝试学习如何使用dendrogramsusing . 我想要获得集群并能够将它们可视化;我听说是最好的办法。PythonSciPyhierarchical clusteringdendrograms

如何以特定距离“砍伐”树木?

在这个例子中,我只想将其远距离切割1.6 在此输入图像描述

我在https://joernhees.de/blog/2015/08/26/scipy-hierarchical-clustering-and-dendrogram-tutorial/#Inconsistency-Method上查找了教程,但这家伙使用**kwargs(他称为他的阈值max_d

这是我的代码和下面的图;为了可重复性,我尝试尽可能地对其进行注释:

from __future__ import print_function
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from scipy.cluster.hierarchy import dendrogram,linkage,fcluster
from scipy.spatial import distance
np.random.seed(424173239) #43984

#Dims
n,m = 20,7

#DataFrame: rows = Samples, cols = Attributes
attributes = ["a" + str(j) for j in range(m)]
DF_data = pd.DataFrame(np.random.random((n, m)), columns = attributes)

A_dist = distance.cdist(DF_data.as_matrix().T, DF_data.as_matrix().T)

#(i) . Do …
Run Code Online (Sandbox Code Playgroud)

python numpy hierarchical-clustering dendrogram scipy

5
推荐指数
1
解决办法
6839
查看次数

旋转 ggplot 树状图的标签

我正在尝试使用包 dendexend 创建一个树状图。它创建了非常好的 gg 树状图,但不幸的是,当你把它变成一个“圆圈”时,标签跟不上。我将在下面提供一个示例。

我的距离对象在这里:http : //speedy.sh/JRVBS/mydist.RDS

library(dendextend)
library(ggplot2)
#library(devtools) ; install_github('kassambara/factoextra')
library(factoextra)


clus <- hcut(mydist, k = 6, hc_func = 'hclust', 
             hc_method = 'ward.D2', graph = FALSE, isdiss = TRUE)

dend <- as.dendrogram(clus)
labels(dend) <- paste0(paste0(rep(' ', 3), collapse = ''), labels(dend))
dend <- sort(dend, decreasing = FALSE)

ggd1 <- ggplot(dend %>%
                   set('branches_k_color', k = 6) %>%
                   set('branches_lwd', 0.6) %>%
                   set('labels_colors', k = 6) %>%
                   set('labels_cex', 0.6), 
               theme = theme_minimal(),
               horiz = TRUE)
ggd1 <- ggd1 + …
Run Code Online (Sandbox Code Playgroud)

r dendrogram ggplot2 ggdendro dendextend

5
推荐指数
1
解决办法
2179
查看次数

5
推荐指数
2
解决办法
3251
查看次数

scipy中树状图坐标和ClusterNodes之间的关系

我正在寻找一种方法,根据to_tree返回的ClusterNode来获取树状图中集群点的坐标。

使用 scipy 根据以下数据构建树状图:

X = data
Y = pdist(X)
Z = linkage(Y)
dend = dendrogram(Z)
rootnode, nodesList = to_tree(Z, rd=True)
Run Code Online (Sandbox Code Playgroud)

我想做的是构建一个函数,get_coords(somClusterNode)该函数将返回(x, y)指定图中节点位置的元组。

感谢这个答案,我设法弄清楚如何从树状图返回值中获取位置,例如:

i, d = list(zip(dend['icoord'], dend['dcoord']))[-1]
x = 0.5 * sum(i[1:3])
y = d[1]
plt.plot(x, y, 'ro')
Run Code Online (Sandbox Code Playgroud)

但我可以找出nodesList 排序和icoord/dcoord排序之间的关系,以便将一个映射到另一个。

你知道我可以在哪里寻找吗?

感谢您的帮助 !

plot hierarchical-clustering dendrogram scipy linkage

5
推荐指数
1
解决办法
2006
查看次数

使用树状图可视化层次聚类中的最低节点

我正在linkage为大约 5000 个实例的数据集生成凝聚层次聚类。我想可视化层次结构中的“底部”合并,即靠近具有最小距离度量的叶子的节点。

不幸的是,dendrogram可视化更喜欢显示算法中最后一次合并的“顶部”节点。默认情况下,它显示前 30 个节点,折叠树的底部。我可以更改P值以显示更多节点,但我必须显示所有 5000+ 才能看到聚类的最低级别,此时绘图不再可读。

MCVE

例如,从linkage文档示例开始

openExample('stats/CompareClusterAssignmentsToClustersExample')
run CompareClusterAssignmentsToClustersExample
dendrogram(Z, 'Orient', 'Left', 'Labels', species);
Run Code Online (Sandbox Code Playgroud)

生成一个树状图,其中前 30 个节点可见。带有数字标签的节点正在折叠树的较低级别。

具有折叠较低级别的树状图

我可以增加可见节点的数量以包含所有叶子,但会牺牲可读性。

dendrogram(Z, size(Z,1), 'Orient', 'Left', 'Labels', species);
Run Code Online (Sandbox Code Playgroud)

所有叶子的树状图

我想要什么

我真正喜欢的是上面的放大版本,如下例所示,但显示前 30 个最近的集群。

放大所有叶子的树状图

我试过的

我尝试提供前 30 行的函数Z

dendrogram(Z(1:30), 'Orient', 'Left');
Run Code Online (Sandbox Code Playgroud)

但这会引发“索引超出矩阵维度”。当其中一行引用行中的集群 > 30 时出错。

我也尝试使用 dendrogramReorder属性,但我很难找到一个有效的排序,从最近到最远对集群进行排序。

%The Z matrix is in order from closest cluster to furthest, 
% so I can use it to create an ordering
Y = …
Run Code Online (Sandbox Code Playgroud)

matlab dendrogram

5
推荐指数
1
解决办法
622
查看次数

合并多个 hclust 对象(或树状图)

有没有一种简单的方法可以在根处合并多个 hclust 对象(或树状图)?

我已经使示例尽可能完整来说明我的问题。

假设我想按区域对 USArrest 进行聚类,然后将所有 hclust 对象联合起来,将它们绘制在热图中。

USArrests
Northeast <- c("Connecticut", "Maine", "Massachusetts", "New Hampshire", "Rhode Island", 
"Vermont", "New Jersey", "New York", "Pennsylvania")
Midwest <-  c("Illinois", "Indiana", "Michigan", "Ohio",  "Wisconsin", 
    "Iowa", "Kansas", "Minnesota", "Missouri", "Nebraska", "North Dakota", 
    "South Dakota")
South <- c("Delaware", "Florida", "Georgia", "Maryland", "North Carolina", 
           "South Carolina", "Virginia", "West Virginia", 
           "Alabama", "Kentucky", "Mississippi", "Tennessee", "Arkansas", 
           "Louisiana", "Oklahoma", "Texas")
West <- c("Arizona", "Colorado", "Idaho", "Montana", "Nevada", "New Mexico", 
          "Utah", "Wyoming", "Alaska", "California", "Hawaii", "Oregon", "Washington")

h1 <- …
Run Code Online (Sandbox Code Playgroud)

r dendrogram hclust pheatmap

5
推荐指数
1
解决办法
1592
查看次数

如何在python中将树状图转换为树对象?

我正在尝试使用 scipy.hierarchy.cluster 模块对某些文本进行分层聚类。我做了以下工作:

l = linkage(model.wv.syn0, method='complete', metric='cosine')

den = dendrogram(
l,
leaf_rotation=0.,  
leaf_font_size=16.,  
orientation='left',
leaf_label_func=lambda v: str(model.wv.index2word[v])
Run Code Online (Sandbox Code Playgroud)

dendrogram 函数返回一个包含树的表示的字典,其中:

den['ivl'] 是与叶子对应的标签列表:

['politics', 'protest', 'characterfirstvo', 'machine', 'writing', 'learning', 'healthcare', 'climate', 'of', 'rights', 'activism', 'resistance', 'apk', 'week', 'challenge', 'water', 'obamacare', 'colorado', 'change', 'voiceovers', '52', 'acting', 'android']
Run Code Online (Sandbox Code Playgroud)

den['leaves'] 是每个叶子在叶子从左到右遍历中的位置列表:
[0, 18, 5, 6, 2, 7, 12, 16, 21, 20, 22, 3, 10, 14, 15, 19, 11, 1, 17, 4, 13, 8, 9]

我知道 scipy 的to_tree()方法通过返回对根节点(一个 ClusterNode 对象)的引用,将由链接矩阵表示的层次聚类转换为树对象 - 但我不确定这个根节点如何对应我的叶子/标签。例如,get_id() …

python hierarchical-clustering dendrogram scipy

5
推荐指数
1
解决办法
527
查看次数