从 Martin 的示例中可以看出,需要创建一个包装函数来指示 sns.kdeplot 使用什么颜色映射。这是一个类似的例子,应该更容易理解:
# We will use seaborn 'Set1' color pallet
>>> print(sns.color_palette('Set1'))
[(0.89411765336990356, 0.10196078568696976, 0.10980392247438431),
(0.21602460800432691, 0.49487120380588606, 0.71987698697576341),
(0.30426760128900115, 0.68329106055054012, 0.29293349969620797),
(0.60083047361934883, 0.30814303335021526, 0.63169552298153153),
(1.0, 0.50591311045721465, 0.0031372549487095253),
(0.99315647868549117, 0.9870049982678657, 0.19915417450315812)]
颜色图采用基于托盘的颜色。默认托盘是绿色 - (0., 0., 1.) 和蓝色 - (0., 0.5, 0.)。但是,我们使用的是上面的具有不同 RBG 元组的托盘。
def infer_cmap(color):
hues = sns.color_palette('Set1')
if color == hues[0]:
return 'Reds'
elif color == hues[1]:
return 'Blues'
def kde_color_plot(x, y, **kwargs):
cmap = infer_cmap(kwargs['color'])
ax = sns.kdeplot(x, y, shade=True, shade_lowest=False, cmap=cmap, **kwargs)
return ax
g = sns.PairGrid(df, hue='left', vars=['satisfaction_level', 'last_evaluation'], palette='Set1')
g = g.map_upper(plt.scatter, s=1, alpha=0.5)
g = g.map_lower(kde_color_plot)
g = g.map_diag(sns.kdeplot, shade=True);