【发布时间】:2016-12-06 22:02:19
【问题描述】:
通常当我做树状图和热图时,我使用距离矩阵并做一堆SciPy 的东西。我想试试Seaborn 但Seaborn 想要我的数据是矩形的(行=样本,列=属性,而不是距离矩阵)?
我本质上想使用seaborn 作为后端来计算我的树状图并将其添加到我的热图上。这可能吗?如果没有,这是否可以成为未来的功能。
也许我可以调整一些参数,以便它可以采用距离矩阵而不是矩形矩阵?
用法如下:
seaborn.clustermap¶
seaborn.clustermap(data, pivot_kws=None, method='average', metric='euclidean',
z_score=None, standard_scale=None, figsize=None, cbar_kws=None, row_cluster=True,
col_cluster=True, row_linkage=None, col_linkage=None, row_colors=None,
col_colors=None, mask=None, **kwargs)
我的代码如下:
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
DF = pd.DataFrame(X, index = ["iris_%d" % (i) for i in range(X.shape[0])], columns = iris.feature_names)
我不认为我的方法在下面是正确的,因为我给它一个预先计算的距离矩阵,而不是它要求的矩形数据矩阵。没有关于如何将相关/距离矩阵与clustermap 一起使用的示例,但有https://stanford.edu/~mwaskom/software/seaborn/examples/network_correlations.html 的示例,但排序不与普通的sns.heatmap 函数一起使用。
DF_corr = DF.T.corr()
DF_dism = 1 - DF_corr
sns.clustermap(DF_dism)
【问题讨论】:
-
我不确定我是否理解这个问题。第二个矩阵不是方阵吗?
-
是的,第二个肯定是正方形的,但它是 b/c 我给它一个距离矩阵(1-相关),而
sns.cluster_map需要矩形数据矩阵。所以基本上它采用了我的冗余平方距离矩阵,将它们视为原始值,然后从中进行链接。这在数学上有效吗?这似乎没有意义,因为输入需要一个矩形数据矩阵,我认为某些步骤正在重复。 -
我认为您需要编辑问题以更清楚地了解您想知道的内容。如所写,您在询问如何制作方阵,并且您正在展示一个方阵图。
-
K,我现在就解决这个问题。
标签: python matplotlib heatmap seaborn hierarchical-clustering