【问题标题】:How to extract the labels from sns.clustermap如何从 sns.clustermap 中提取标签
【发布时间】:2022-08-19 14:32:52
【问题描述】:

如果我正在使用sns.clustermap 绘制(相关)数据框,它会自动将数据框多索引作为标签并将它们绘制在集群图的正下方。

如何访问这些标签?我正在使用 clustermaps 作为大型数据集(100-200 个条目)的探索工具,我需要各种集群中条目的名称。

例子:

elev = [1, 100, 10, 1000, 100, 10]
number = [1, 2, 3, 4, 5, 6]
name = [\'foo\', \'bar\', \'baz\', \'qux\', \'quux\', \'quuux\']
idx = pd.MultiIndex.from_arrays([name, elev, number], 
                                 names=(\'name\',\'elev\', \'number\'))
data = np.random.rand(20,6)
df = pd.DataFrame(data=data, columns=idx)

clustermap = sns.clustermap(df.corr())

现在我会说有两个不同的集群:前两行和后四行,所以[foo-1-1, bar-100-2][baz-10-3, qux-1000-4, quux-100-5, quuux-10-6]

如何提取这些(或整个[foo-1-1, bar-100-2, baz-10-3, qux-1000-4, quux-100-5, quuux-10-6] 列表)?拥有 100 多个条目,仅手动将它们写下来并不是一个真正的选择。

documentation 提供 clustergrid.dendrogram_row.reordered_ind 但这只是给了我原始数据框中的索引号。但我正在寻找更像df.columns 的输出的东西

使用this 在我看来,我正朝着正确的方向前进,但是当我让它自动形成集群时,我只能提取给定行所属的集群,但我想定义集群我自己,视觉上。

标签: python seaborn


【解决方案1】:

与往常一样,答案就在那里,我只是忽略了它。

This answer(在 cmets 中由 Trenton McKinney 指出)有所需的剪断:

ax_heatmap.yaxis.get_majorticklabels()

(我不会调查ax_heatmap 来解决这个问题......)。因此,从问题继续 MWE:

labels = clustermap.ax_heatmap.yaxis.get_majorticklabels()

但是,这是一个列表

type(labels[0])
matplotlib.text.Text

因此,除非我(再次)遗漏了某些东西,否则使用起来并不完全正确。然而,这可以简单地循环成更有用的东西。假设我对整个名称(即完整的前 df multiindex)和数字感兴趣:

labels_list = []
number_list = []
for i in labels:
    i = str(i)
    name_start = i.find('\'')+1
    name_end = i.rfind('\'')
    name = i[name_start:name_end]
    number_start = name.rfind('-')+1
    number = name[number_start:]
    number = int(number)
    labels_list.append(name)
    number_list.append(number)

现在我有两个易于使用的列表,一个是完整的字符串,一个是整数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多