如何在seaborn图形级别绘图中指定调色板

3

我已经学会了,如果需要进行特定的更改或详细的可视化,就不要使用seaborn,但是有时候感觉我没有完全利用它所提供的。

  • 我有一系列二维切片,绘制聚类成员。
  • 问题在于,在不同的情况下,存在的聚类数目会发生变化,这会导致seaborn重新设置颜色调色板,从而导致不同的聚类使用相同的颜色。

我想要具体指定seaborn的颜色调色板。我不确定是我漏掉了什么还是这是一些无法解决的细节,尤其是在使用facetgrid时。

df = pd.DataFrame()
df['I'] = np.full(20,1)
df['J'] = np.arange(0,20,1)
df['K'] = [1]*12 + [2]*8
df['CM_Hard'] = [1]*10 + [2] + [0] + [2]*8 
df['Realization'] = ['p25']*10 + ['p50']*9 + ['p75']

for layer in df['K'].unique():
    layer_data_slice = df.groupby('K').get_group(layer)

    g = sns.FacetGrid(layer_data_slice, col="Realization",hue="CM_Hard")
    g.map_dataframe(sns.scatterplot, x="I", y="J", s=50, marker='+', palette='deep')
    g.add_legend()

    g.fig.suptitle("Training Realizations, Layer: {}".format(int(layer)), size=16, y=1.05)
    figure_title = 'Training_Layer_{}'.format(int(layer))

链接到当前存在重复颜色调色板的问题

我尝试使用以下代码来定义调色板,但它并没有影响图表:

palette = {0:"tab:cyan", 1:"tab:orange", 2:"tab:purple"}

已经尝试使用"tab:color"、"color"和RGB参考,但都没有成功。更改时没有错误提示,但也没有实际效果。

1个回答

5
  • 更新到seaborn 0.11.2。不建议直接使用FacetGrid,请使用kind='scatter'seaborn.relplot进行图像级别的绘制。
  • palette中的keys必须与传递给hue的列的唯一值相匹配
  • python 3.8.12pandas 1.3.4matplotlib 3.4.3seaborn 0.11.2中测试通过
import seaborn as sns

# load the data - this is a pandas.DataFrame
tips = sns.load_dataset('tips')

# set the hue palette as a dict for custom mapping
palette = {'Lunch': "tab:cyan", 'Dinner':"tab:purple"}

# plot
p = sns.relplot(kind='scatter', data=tips, col='smoker', x='total_bill', y='tip', hue='time', palette=palette)

输入图片描述

  • 使用添加到OP的新样本数据
  • 如果将'K'列重命名为'Layer',则子图标题将与您的示例匹配:df = df.rename({'K': 'Layer'}, axis=1)
p = sns.relplot(data=df, x='I', y='J', s=50, marker='+', row='Layer', col='Realization', hue='CM_Hard', palette=palette, height=4)
p.fig.suptitle('Training Realizations', y=1.05, size=16)

在此输入图片描述

FacetGrid

  • 请注意,paletteFacetGrid 的调用中,而不是在 map_dataframe 中。
for layer in df['K'].unique():
    layer_data_slice = df.groupby('K').get_group(layer)

    g = sns.FacetGrid(layer_data_slice, col="Realization",hue="CM_Hard", palette=palette)
    g.map_dataframe(sns.scatterplot, x="I", y="J", s=50, marker='+')
    g.add_legend()

    g.fig.suptitle("Training Realizations, Layer: {}".format(int(layer)), size=16, y=1.05)
    figure_title = 'Training_Layer_{}'.format(int(layer))

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接