具有两个 row_colors 的 Seaborn clustermap

Tim*_*aan 2 python cluster-analysis seaborn

简单的问题,我有一个在 row_colors 中包含变量“age_range”的聚类图,我也想将变量“education”添加为 row_color。我有以下工作代码:

agerange = df_cor_small.pop("agerange")
lut = dict(zip(agerange.unique(), "rbg"))
row_colors = agerange.map(lut)

ax = sns.clustermap(df_cor_small, cmap='YlGnBu', row_colors=row_colors, figsize=(15,100), cbar_pos=(1.05, .2, .03, .4))

Run Code Online (Sandbox Code Playgroud)

输出这个图: 在此输入图像描述

(目前 df_cor_small 不包含变量“education”,但一旦我知道如何实现它,它就会包含在内,因此它将像“agerange”一样可弹出)

有什么建议我可以如何实现这个吗?

Stu*_*olf 5

您可以将颜色作为 data.frame 提供,我认为您现在正在提供一个列表。在下面的示例中,我将黑色分配给 8 种颜色,将 7x20 分配给行,将 10 分配给行。没有对行进行聚类来显示分配是正确的:

import seaborn as sns; sns.set(color_codes=True)
import string
iris = sns.load_dataset("iris")
species = iris.pop("species")
lut = dict(zip(species.unique(), "rbg"))
samples = np.repeat(list(string.ascii_letters[0:8]),20)[:150]
sample_cols = dict(zip(set(samples), sns.color_palette("cubehelix", 8)))

row_colors = pd.DataFrame({'species':species.map(lut),
                          'sample':[sample_cols[i] for i in samples]})
g = sns.clustermap(iris, row_colors=row_colors,row_cluster=False)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述