关键词:
【中文标题】如何在python中提取树状图中点之间的距离?【英文标题】:How can I extract the distances between points within a dendogram in python? 【发布时间】:2021-06-27 06:25:59 【问题描述】:我在 python 中执行层次聚类并获得了树状图。我想知道是否有一种方法可以提取最近点之间的距离,例如这里:7 到 8 之间的距离(最近的一个),然后是 0 到 1 之间的距离等等,为了生成绘图,我使用了函数:
linkage_matrix= linkage(dfP, method="single")
cluster_dict = dendrogram (linkage_matrix)
【问题讨论】:
请提供您的dfP
【参考方案1】:
当你这样做时
Z = hierarchy.linkage(X, method='single')
在Z
矩阵中,您拥有所需的一切:cluster1、cluster2、距离、集群中的元素数量。
例如
import numpy as np
import pandas as pd
from scipy.cluster import hierarchy
import matplotlib.pyplot as plt
import seaborn as sns
X = np.array([662., 877., 255., 412., 996., 295., 468., 268.,
400., 754., 564., 138., 219., 869., 669.])
Z = hierarchy.linkage(X, method='single')
plt.figure()
dn = hierarchy.dendrogram(Z)
我们有Z
array([[ 2., 5., 138., 2.],
[ 3., 4., 219., 2.],
[ 0., 7., 255., 3.],
[ 1., 8., 268., 4.],
[ 6., 9., 295., 6.]])
因为我们只有 6 个元素,所以 0 到 5 是单个元素,从 6 开始它们是元素簇
6 是 2 个元素的第一个簇 (2,5) 7 是 2 个元素的第二个簇 (3,4) 8 是第三个簇 (0,7),即 (0,(3,4)) 的 3 个元素 9 是第四个簇 (1,8),即 4 个元素的 (1,(0,(3,4)))那么我们有 (6,9) 即 ((2,5),(1,(0,(3,4)))) 的 6 个元素
clusters =
0: '0',
1: '1',
2: '2',
3: '3',
4: '4',
5: '5',
6: '2,5',
7: '3,4',
8: '0,3,4',
9: '1,0,3,4',
现在我们可以构建一个df
来显示热图
# init the DataFrame
df = pd.DataFrame(
columns=Z[:,0].astype(int),
index=Z[:,1].astype(int)
)
df.columns = df.columns.map(clusters)
df.index = df.index.map(clusters)
# populate the diagonal
for i, d in enumerate(Z[:,2]):
df.iloc[i, i] = d
# fill NaN
df.fillna(0, inplace=True)
# mask everything but diagonal
mask = np.ones(df.shape, dtype=bool)
np.fill_diagonal(mask, 0)
# plot the heatmap
sns.heatmap(df,
annot=True, fmt='.0f', cmap="YlGnBu",
mask=mask)
plt.show()
更新
我将X
定义为距离数组。这些是元素之间的距离的幂零下三角矩阵的值,按列。
我们可以验证
# number of elements
n = (np.sqrt(8 * X.size + 1) + 1) / 2
n
6.0
我们有 n=6
元素,这是距离的幂零下三角矩阵
# init the DataFrame
df = pd.DataFrame(columns=range(int(n)), index=range(int(n)))
# populate the DataFrame
idx = 0
for c in range(int(n)-1):
for r in range(c+1, int(n)):
df.iloc[r, c] = X[idx]
idx += 1
# fill NaNs and mask
df.fillna(0, inplace=True)
mask = np.zeros_like(df)
mask[np.triu_indices_from(mask)] = True
# plot the matrix
sns.heatmap(df, annot=True, fmt='.0f', cmap="YlGnBu", mask=mask)
plt.show()
更新 2
如何为集群距离对角矩阵自动填充地图字典。
首先我们必须计算元素的数量(仅当X
是距离数组时才需要),正如我们之前看到的那样
# number of elements
n = (np.sqrt(8 * X.size + 1) + 1) / 2
然后,我们可以循环遍历Z
矩阵来填充字典
# clusters of single elements
clusters = i: str(i) for i in range(int(n))
# loop through Z matrix
for i, z in enumerate(Z.astype(int)):
# cluster number
cluster_num = int(n+i)
# elements in clusters
cluster_names = [clusters[z[0]], clusters[z[1]]]
cluster_elements = [str(i) for i in cluster_names]
# update the dictionary
clusters.update(cluster_num: ','.join(cluster_elements))
我们有
clusters
0: '0',
1: '1',
2: '2',
3: '3',
4: '4',
5: '5',
6: '2,5',
7: '3,4',
8: '0,3,4',
9: '1,0,3,4',
10: '2,5,1,0,3,4'
【讨论】:
非常感谢!是的,dfP 是一个距离矩阵。 YVW,我添加了元素之间的距离矩阵,以备不时之需 再次感谢,这真的很清楚@MaxPierini 抱歉,最后一个问题,如何创建制作热图所需的集群字典? @MaxPierini 我更新了一种填充字典的方法在 MATLAB 中查找图中的连通分量
】在MATLAB中查找图中的连通分量【英文标题】:FindconnectedcomponentsinagraphinMATLAB【发布时间】:2011-06-0120:05:34【问题描述】:我有许多3D数据点,我希望在此图中找到“连接的组件”。这是形成具有以下特性的集群的地方:每... 查看详情
利用kmeans聚类分析两类问题
...直到所有对象都被聚成一类。在层次聚类中,可以以一张树状图来表示聚类的过程,如果要讲对象分类的话,就可以从根节点触发,按照树状图的分叉情况,划分出不同的类别来。在图中,把一 查看详情
使用python计算谷歌地图中2点之间的距离
】使用python计算谷歌地图中2点之间的距离【英文标题】:Calculatedistancebetween2pointsingooglemapsusingpython【发布时间】:2017-08-0309:09:36【问题描述】:我使用gmail地理编码功能获得经度和纬度。现在我需要计算2点之间的距离。我找到... 查看详情
如何找到地图中两个地理点之间的正确距离?
】如何找到地图中两个地理点之间的正确距离?【英文标题】:howtofindthecorrectdistancebetweentwogeopointsinmap?【发布时间】:2012-07-0221:34:29【问题描述】:我需要开发应用程序,用户必须在其中找到他停放的汽车并显示他与停放汽车... 查看详情
Python matplotlib图例如何减少框架左边缘和标记之间的距离
】Pythonmatplotlib图例如何减少框架左边缘和标记之间的距离【英文标题】:Pythonmatploliblegendhowtoreducedistancebetweenframeleftedgeandmarkers【发布时间】:2020-06-0616:27:02【问题描述】:正如问题所暗示的,我正在尝试减少图例框架的左边缘... 查看详情
从 R 中的切割树状图中提取标签成员资格/分类(即:树状图的 cutree 函数)
】从R中的切割树状图中提取标签成员资格/分类(即:树状图的cutree函数)【英文标题】:Extractlabelsmembership/classificationfromacutdendrograminR(i.e.:acutreefunctionfordendrogram)【发布时间】:2014-10-1615:06:55【问题描述】:我正在尝试从R中的... 查看详情
如何仅使用 numpy 从距离矩阵中提取数据点?
】如何仅使用numpy从距离矩阵中提取数据点?【英文标题】:Howtoextractdatapointsfromthedistancematrixusingnumpyonly?【发布时间】:2021-12-1602:02:53【问题描述】:我有2组数据点:A:mx10B:nx10A和B中数据点的距离矩阵D:mxn如何使用距离矩阵D... 查看详情
如何从gps数据中找到点之间的距离?
】如何从gps数据中找到点之间的距离?【英文标题】:Howtofindthedistancebetweenpointsfromthegpsdata?【发布时间】:2019-06-1511:02:43【问题描述】:我在这里寻找答案,但没有找到工作。所以我有坐标数据框:datetimelon_deglat_deg26.01.201817:5915... 查看详情
怎么在cad看图中测量图纸的距离
...两个点之间的距离的话,我们应该怎么操作?怎么在CAD看图中测量图纸的距离?下面小伙伴们就来和小编一起来看看具体操作方法吧!步骤一:首先,打开自己经常使用的电脑看一下有没有安装CAD看图软件,如果没有在电脑中的... 查看详情
如何使用 Python 从导入的 csv 计算纬度/经度点之间的距离?
】如何使用Python从导入的csv计算纬度/经度点之间的距离?【英文标题】:HowtousePythontocalculatethedistancebetweenlat/longpointsfromimportedcsv?【发布时间】:2020-11-1719:32:44【问题描述】:我正在尝试导入包含四列位置数据(纬度/经度)的.cs... 查看详情
如何使用 pygraphviz 增加点图中节点之间的间距?
】如何使用pygraphviz增加点图中节点之间的间距?【英文标题】:HowcanIincreasespacingbetweennodesindotgraphwithpygraphviz?【发布时间】:2020-12-0603:32:24【问题描述】:我在尝试增加我正在制作的分层图中节点之间的间距时遇到了麻烦。我希... 查看详情
替代(python)计算两个不同集合中所有点之间的距离
】替代(python)计算两个不同集合中所有点之间的距离【英文标题】:Alternative(python)tocalculatedistancebetweenallpointsattwodifferentsets【发布时间】:2021-12-2721:39:42【问题描述】:我有两个不同的点:set_1和set_2。使用python,我想计算从se... 查看详情
如何在不同的数据帧中选择特定时间段内的点,然后根据纬度/经度选择这两个点之间的距离
】如何在不同的数据帧中选择特定时间段内的点,然后根据纬度/经度选择这两个点之间的距离【英文标题】:Howtoselectpointswithinaspecifictimeperiodindifferentdataframesandthenthedistancebetweenthesetwopointsbasedonlat/long【发布时间】:2018-09-1420:36:5... 查看详情
python计算python中具有无限维度的两个点之间的距离(代码片段)
从深度图中提取物体边界
从深度图中提取物体边界PCL 一、深度图像的边界从深度图像中提取边界。其中我们对3种类型的点感兴趣:物体边界,物体最外层和阴影边界的可见点集;阴影边界,连接于遮挡的背景上的点集;Veil点集,在被遮挡物边界和... 查看详情
防止标签在 hclust/树状图中剪裁
...类的歌曲相似性。但是,当我生成绘图时,我无法弄清楚如何防止状态名称被剪裁(clickforexample)。有什么想法吗?代码:var.towhee<-read.csv(file="state 查看详情
如何提取两个点之间的文本
】如何提取两个点之间的文本【英文标题】:Howtoextracttextbetweentwodots【发布时间】:2020-12-0813:09:09【问题描述】:你好,谁能告诉我。示例:goldintre.cr.usgs.gov.我想要从第一个点到最后一个点的所有文本(开头和结尾都没有点)... 查看详情
在加权无向图中测量社区之间的距离
】在加权无向图中测量社区之间的距离【英文标题】:Measuringdistancebetweencommunitiesinweightedundirectedgraph【发布时间】:2020-01-1813:48:08【问题描述】:我有一个加权的无向图,其中有不重叠的社区。什么样的测量可以帮助我们找出相... 查看详情