Seaborn clustermap 和列的多色标记

Seaborn clustermap and multiple color labeling of columns

每个 seaborn.clustermapcol_colors 段,您可以将 pandas.DataFrame 对象作为 col_colors 属性传递以获取映射.但是,当我传递 DataFrame 时,我得到了正确的标签,但没有颜色。下面的示例代码:

import seaborn as sns
import pandas as pd

data=sns.load_dataset("iris")
data.pop("species")

color_pal = ["r","r","b","b"]
color_th = ["y","g","y","g"]
color_df = pd.DataFrame([color_pal,color_th],index=["type","size"]).T

sns.clustermap(data=data,col_colors=color_df)

iris 数据集由四列组成:

sepal_length, sepal_width, petal_length, petal_width

上面测试代码背后的“想法”是将所有 sepal 着色为红色,所有 petal 着色为蓝色,所有 length 着色为黄色,所有 width作为绿色。所以 sepal_length 会有一层红色,另一层黄色。当我将上面的代码传递给 clustermap 时,我得到以下图:

正确的标签,但没有任何颜色。

但是当我通过以下代码时:

sns.clustermap(data=data,col_colors=color_df["type"].values) 

我得到下一张图片:

我得到了正确的颜色,但我没有任何标签而且我只有一个标签。我发现 this 问题,它重申颜色也通过索引与数据匹配 - 我想这就是为什么我没有得到正确的着色。

我想要的是使用正确的标签和正确的颜色获得多级标签。

我能理解索引如何匹配行颜色 - 但我无法真正理解它如何使用索引来匹配列颜色。我怎样才能使这段代码工作。

据我了解,color_df 的索引映射到 data 的列。因此,color_df = pd.DataFrame([color_pal,color_th],index=["type","size"], columns=data.columns).T 或者,如果没有转置:color_df = pd.DataFrame({"type": color_pal, "size": color_th}, index=data.columns) 将为 type 设置一个颜色行,为 size.

设置另一个颜色行
import seaborn as sns
import pandas as pd

data = sns.load_dataset("iris")
data.pop("species")

color_pal = ["r", "r", "b", "b"]
color_th = ["y", "g", "y", "g"]
color_df = pd.DataFrame({"type": color_pal, "size": color_th}, index=data.columns)

sns.clustermap(data=data, col_colors=color_df)