在seaborn.PairGrid上将多个数据集绘制为具有不同颜色的kdeplots

Mar*_*ses 5 python matplotlib seaborn

我正在尝试绘制与seaborn文档中描述的情况非常相似的情况: http://seaborn.pydata.org/tutorial/axis_grids.html#plotting-pairwise-relationships-with-pairgrid-and-pairplot

可以在下面的几张图表中找到所讨论的示例,其中sns.PairGrid使用 iris 数据集绘制了 。他们将不同的物种绘制在样本对网格上,并将物种颜色编码为色调。

我基本上想做到这一点,但是使用 kde 等高线图。我得到的数据格式与它们相同:

new_HP.head()
          A         C     logsw Mass Range
0 -3.365547  0.977325  6.172032          0
1 -0.836703  0.962374  5.949639          0
2 -0.522476  0.931787  5.967940          0
3 -0.508345  0.974561  5.929046          0
4 -0.753747  0.905854  6.027479          0
Run Code Online (Sandbox Code Playgroud)

“质量范围”取值 0、1、2、3。和

g = sns.PairGrid(new_HP, vars=['A', 'C', 'logsw'], hue="Mass Range")
g.map_diag(sns.kdeplot)
g.map_lower(sns.kdeplot)
g.map_upper(plt.scatter)
Run Code Online (Sandbox Code Playgroud)

我得到以下情节kde轮廓都是一样的颜色而且丑陋。 我想为每个“质量范围”箱设置 kde 计数的颜色,就像右上角的散点颜色显示为色调一样。我怎样才能做到这一点?

jb3*_*326 4

如果你不介意稍微滥用 Python 函数属性,你可以尝试这样的事情:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from itertools import cycle

data = sns.load_dataset('iris')

def make_kde(*args, **kwargs):    
    sns.kdeplot(*args, cmap=next(make_kde.cmap_cycle), **kwargs)

make_kde.cmap_cycle = cycle(('Blues_r', 'Greens_r', 'Reds_r'))

pg = sns.PairGrid(data, vars=('sepal_length', 'sepal_width', 'petal_length'), hue='species')
pg.map_diag(sns.kdeplot)
pg.map_lower(make_kde)
pg.map_upper(plt.scatter)
Run Code Online (Sandbox Code Playgroud)

cmap_cycle这将循环访问存储在附加到函数的属性中的颜色映射列表make_kde

“iris”数据集的结果如下所示: 示例图像