带有来自两个不同数据框列的多种配色方案的带注释的热图

Annotated heatmap with multiple color schemes from two different columns of dataframe

我有以下格式的数据框:

Percent category  MolA  MolB
  20      1     02K@sc  81G@bs
  15      0     04F@sc  79U@bs
  16      2     04F@sc  79U@sg
  18      1     04F@sc  80A@bs
  4       0     04F@sc  80A@ph

我想根据百分比值绘制 MolA 列与 MolB 的对比图。对于着色每个类别应该是不同的颜色,例如 0 --> 蓝色,1 --> 红色,2--> 绿色然后这些颜色的 hue/shades 将根据百分比。

我试过使用 sns.colorpalette("YlGnBu", 30) 但这并不是我想要的,而且这对于区分两个不同的类别似乎不是很清楚。

是否可以这样绘制数据框?

可以利用热图的行为,通过遍历每个类别自动从地图中排除空值,排除不在该类别中的 Percent 并为生成的枢轴制作热图 table.如果你循环,你可能会得到你想要的。

import pandas as pd
df = pd.DataFrame({'Percent': [20, 15, 16, 18, 4],
 'category': [1, 0, 2, 1, 0],
 'MolA': ['02K@sc', '04F@sc', '04F@sc', '04F@sc', '04F@sc'],
 'MolB': ['81G@bs', '79U@bs', '79U@sg', '80A@bs', '80A@ph']})


palettes = ['Blues','Greens','Oranges']

for c, p in zip(df.category.unique(), palettes):
    t = df.copy()
    t['Percent'] = np.where(t['category'].ne(c), np.nan, df['Percent'])
    sns.heatmap(t.pivot('MolA','MolB','Percent'), cbar=False, cmap=p, annot=True)