我想创建一个带有水平标签的树状图,但让叶子根据其高度悬挂,而不是仅仅掉落到图的边缘。
例子:
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 中绘制树状图时,我遇到了一个我以前从未见过的有趣错误。
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 文件中时,我没有出现该错误.. 知道这意味着什么吗?
我想计算我的聚类分析解决方案对实际距离分数的拟合程度。为此,我需要提取我正在聚类的刺激之间的距离。我知道在查看 树状图时我可以提取距离,例如 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) 我正在尝试学习如何使用dendrogramsusing . 我想要获得集群并能够将它们可视化;我听说是最好的办法。PythonSciPyhierarchical clusteringdendrograms
如何以特定距离“砍伐”树木?
我在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) 我正在尝试使用包 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) 有没有人有办法corrplot用树状图装饰 R相关图?
我正在寻找一种方法,根据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排序之间的关系,以便将一个映射到另一个。
你知道我可以在哪里寻找吗?
感谢您的帮助 !
我正在linkage为大约 5000 个实例的数据集生成凝聚层次聚类。我想可视化层次结构中的“底部”合并,即靠近具有最小距离度量的叶子的节点。
不幸的是,dendrogram可视化更喜欢显示算法中最后一次合并的“顶部”节点。默认情况下,它显示前 30 个节点,折叠树的底部。我可以更改P值以显示更多节点,但我必须显示所有 5000+ 才能看到聚类的最低级别,此时绘图不再可读。
例如,从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) 有没有一种简单的方法可以在根处合并多个 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) 我正在尝试使用 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() …