关键词:
【中文标题】在 Scipy/Matplotlib 中注释树状图节点【英文标题】:Annotating Dendrogram nodes in Scipy/Matplotlib 【发布时间】:2015-07-30 19:30:17 【问题描述】:我正在尝试在scipy.cluster.hierarchy.dendrogram
生成的树状图中标记节点。
我正在使用augmented dendrogram suggested here,尝试将示例中的集群间距离标签 (1.01,1.57) 替换为 ('a+c','a+b+c') 等字符串。
下面是一个示例链接矩阵
Z = array([[ 2, 7, 0, 2],
[ 0, 9, 0, 2],
[ 1, 6, 0, 2],
[ 5, 10, 0, 3],
[11, 12, 0, 4],
[ 4, 8, 0, 2],
[14, 15, 0, 6],
[13, 16, 0, 9],
[ 3, 17, 1, 10]])
对于这个例子,我创建了如下临时标签:
labels = [str(Z[ind,0].astype(int))+'+'+str(Z[ind,1].astype(int)) for ind in range(len(Z))]
并将augmented_dendrogram修改为:
def augmented_dendrogram(labels,*args, **kwargs):
ddata = cl.dendrogram(*args, **kwargs)
if not kwargs.get('no_plot', False):
for ind,(i, d) in enumerate(zip(ddata['icoord'], ddata['dcoord'])):
x = 0.5 * sum(i[1:3])
y = d[1]
plt.plot(x, y, 'ro')
plt.annotate(labels[ind], (x, y), xytext=(10,15),
textcoords='offset points',
va='top', ha='center')
return ddata
但是,生成的标签未与树状图中的节点对齐:
如何将标签与正确的节点对齐?
【问题讨论】:
【参考方案1】:如果我正确理解您的问题,那么您正在寻找由 scipy 的 dendrogram
函数返回的字典中的字段 'leaves'
。根据 scipy 的documentation:
对于每个 i,H[i] == j,簇节点 j 出现在叶子从左到右遍历的位置 i 中,其中 和 。如果 j 小于 n,则第 i 个叶节点对应于原始观察。否则,它对应于非单例集群。
简而言之,这意味着您可以使用此字段将标签排序为正确的顺序,例如通过将相应的行更改为:
plt.annotate(labels[ddata['leaves'][ind]], (x, y), xytext=(10,15), textcoords='offset points', va='top', ha='center')
【讨论】:
据我判断,这个解决方案行不通,因为ddata['leaves']
只包括叶子(即只有终端,但不包括内部节点)。【参考方案2】:
这是我在处理类似问题时找到的解决方案。请注意,OP 中给出的链接矩阵缺少距离(第三列)。我人为地插入这些距离,然后使用它们来识别树状图中节点的正确索引。 scipy distance
函数生成距离已经排序的链接矩阵(至少在使用 ward
作为链接方法时)。
这是我的代码:
Z = np.array([[ 2, 7, 0, 2],
[ 0, 9, 0, 2],
[ 1, 6, 0, 2],
[ 5, 10, 0, 3],
[11, 12, 0, 4],
[ 4, 8, 0, 2],
[14, 15, 0, 6],
[13, 16, 0, 9],
[ 3, 17, 1, 10]], dtype=float)
Z[:, 2] = np.arange(1., len(Z)+1)
labels = [str(len(Z)+1+ind)+'='+str(Z[ind,0].astype(int))+'+'+str(Z[ind,1].astype(int)) for ind in range(len(Z))]
fig, ax = plt.subplots(1, 1, figsize=(10, 10))
dn = dendrogram(Z, ax=ax)
ii = np.argsort(np.array(dn['dcoord'])[:, 1])
for j, (icoord, dcoord) in enumerate(zip(dn['icoord'], dn['dcoord'])):
x = 0.5 * sum(icoord[1:3])
y = dcoord[1]
ind = np.nonzero(ii == j)[0][0]
ax.annotate(labels[ind], (x,y), va='top', ha='center')
plt.tight_layout()
plt.savefig('./tmp.png')
plt.close(fig)
结果是:
【讨论】:
如何在 heatmap.2 中展开树状图
】如何在heatmap.2中展开树状图【英文标题】:Howtoexpandthedendograminheatmap.2【发布时间】:2014-03-2520:15:34【问题描述】:我有以下带有树状图的热图。完整数据为here。问题是左边的树状图被压扁了。如何在不改变热图列大小的情况... 查看详情
怎样用excel做树状图?
...在弹出的对话框中选择“层次结构。4、随意选择了一种树状图,弹出的树状图如下,图中的文字部分可以更改成需要的内容。5、更改树状图形状:选择任意需要更改的树状图单元,鼠标右键单击,在弹出的菜单中选择“更改形... 查看详情
在R中使用dendextend修改树状图
】在R中使用dendextend修改树状图【英文标题】:DendrogrammodificationusingdendextendinR【发布时间】:2016-08-1313:43:08【问题描述】:我正在尝试使用dendextend修改和调整集群树状图,使用以下代码:#preparehierarchicalclusterhc=hclust(dist(mtcars))den... 查看详情
如何手动创建树状图(或“hclust”)对象? (在 R 中)
】如何手动创建树状图(或“hclust”)对象?(在R中)【英文标题】:HowdoImanuallycreateadendrogram(or"hclust")object?(inR)【发布时间】:2011-01-1915:14:24【问题描述】:我有一个树状图作为图像提供给我。由于它不是很大,我可以... 查看详情
numpy、scipy、matplotlib 和 pylab 之间的混淆
】numpy、scipy、matplotlib和pylab之间的混淆【英文标题】:Confusionbetweennumpy,scipy,matplotlibandpylab【发布时间】:2012-10-1020:34:50【问题描述】:Numpy、scipy、matplotlib和pylab是使用python进行科学计算的常用术语。我刚学了一点pylab,就搞糊... 查看详情
如何在 matplotlib 中调整树状图的分支长度(如在 astrodendro 中)? [Python]
】如何在matplotlib中调整树状图的分支长度(如在astrodendro中)?[Python]【英文标题】:Howtoadjustbranchlengthsofdendrograminmatplotlib(likeinastrodendro)?[Python]【发布时间】:2018-11-2314:09:35【问题描述】:下面是我的结果图,但我希望它看... 查看详情
在 scipy 中修剪树状图(分层聚类)
】在scipy中修剪树状图(分层聚类)【英文标题】:Pruningdendrograminscipy(hierarchicalclustering)【发布时间】:2012-05-0512:21:14【问题描述】:我有一个包含大约5000个条目的距离矩阵,并使用scipy的层次聚类方法对矩阵进行聚类。我用于... 查看详情
在 Scipy 错误中为大型数据集绘制树状图
】在Scipy错误中为大型数据集绘制树状图【英文标题】:PlottingdendrograminScipyerrorforlargedataset【发布时间】:2012-04-2913:21:30【问题描述】:我正在使用Scipy进行层次聚类。我确实设法使用fcluster在阈值上获得平坦的集群。但我需要可... 查看详情
您如何比较两个树状图(在 R 中)之间的“相似性”?
】您如何比较两个树状图(在R中)之间的“相似性”?【英文标题】:Howdoyoucomparethe"similarity"betweentwodendrograms(inR)?【发布时间】:2010-02-0721:23:28【问题描述】:我有两个树状图,我希望将它们相互比较,以了解它们有多... 查看详情
ppt中怎么做树状图
...式后插入PPT,更改颜色和输入文本后保存,就能在ppt中做树状图。具体操作请参照以下步骤。1、在电脑上打开PPT软件新建一个文档,在菜单栏“插入”选项中选择smartart图形。2、在找开的smartart全部图形中,选择一个自己喜欢的... 查看详情
带有名称的 Scipy 树状图
】带有名称的Scipy树状图【英文标题】:Scipydendrogramwithnames【发布时间】:2016-10-2606:34:13【问题描述】:我在工作中使用来自thispost的示例树状图,但也想跟踪哪一行/哪列来自哪条数据。我已将数据名称记录为names的代码编辑如... 查看详情
sklearn库
...it-learn:一组简单有效的工具集。依赖Python和NumPy、SciPy、matplotlib库。是开源和可复用的Sklearn是Scikit-learn的简称,是基于Python的第三方模块,集成了常用的机器学习方法,在进行学习任务时,并不需要实现算法,只需要简单的调... 查看详情
在 jupyter notebook 中使用 plotly python 绘制具有不等热图的交互式树状图
...在jupyternotebook中使用plotlypython绘制具有不等热图的交互式树状图【英文标题】:plottinginteractiveDendrogramwithanunequalHeatmapusingplotlypythoninjupyternotebook【发布时间】:2021-09-1606:43:23【问题描述】:我正在尝试使用looklikethisone的Plotly包在j... 查看详情
如何根据定义的组为树状图的标签着色? (在 R 中)
】如何根据定义的组为树状图的标签着色?(在R中)【英文标题】:Howtocoloradendrogram\'slabelsaccordingtodefinedgroups?(inR)【发布时间】:2015-09-1601:03:58【问题描述】:我在R中有一个24行10,000列的数字矩阵。这个矩阵的行名基本上是文... 查看详情
在距离高度从 SciPy 切割树状图/聚类树
】在距离高度从SciPy切割树状图/聚类树【英文标题】:CuttingDendrogram/ClusteringTreefromSciPyatdistanceheight【发布时间】:2016-07-3103:28:52【问题描述】:我正在尝试学习如何在Python中使用dendrograms使用SciPy。我想获得集群并能够可视化它... 查看详情
mac安装numpy,scipy,matplotlib
p.p1{margin:0.0px0.0px0.0px0.0px;font:18.0px"CourierNew";color:#000000;background-color:#ffffff}span.s1{} p.p1{margin:0.0px0.0px0.0px0.0px;font:18.0px"CourierNew";color:#000000;background-color:# 查看详情
在html网页中如何实行树状图显示呀
参考技术A用以下代码结构模拟树形:<ul><li><ul><li></li><li></li></ul></li><li></li></ul> 参考技术B1、用table或div结合ul排版本回答被提问者采纳 查看详情
来自预制链接矩阵的树状图
】来自预制链接矩阵的树状图【英文标题】:dendrogramfrompre-madelinkagematrix【发布时间】:2021-09-2017:09:41【问题描述】:问题:在R中,我需要绘制一个树状图+从用不同语言创建的链接矩阵中切割关联的树。根据数据集的性质,之... 查看详情