Seaborn Pairplot中的自定义装箱

时间:2019-05-30 18:58:45

标签: python matplotlib seaborn

我是seaborn的新手,并且目前正在使用pairplot功能...通过以下操作

seaborn.pairplot(data,
                 hue="Class",
                 diag_king="hist",
                 diag_kws={'alpha'=0.5}
                 )

我能够实现我想要的大部分内容:pandas数据帧data的散点图网格,根据Class列具有单独的分布,并且半沿对角线的透明直方图。

我发现将bin=[...]传递给diag_kws可以使所有对角线图都采用该合并,但我希望将数据帧的每一列都从专用词典中进行分箱(使用键来命名列名)。

是否可以使用diag_kws来实现?还是我需要在调用pairplot之后手动访问每个对角线图并手动重新绑定它们?最有效的方法是什么?

1 个答案:

答案 0 :(得分:2)

PairGrid提供了map_diag,它可以用来映射自定义函数,该函数会更改每个调用中的参数。看起来可能像这样。请注意,需要注意顺序(通过vars参数)以确保应用了正确的参数。

import matplotlib.pyplot as plt
import seaborn as sns


iris = sns.load_dataset("iris", cache=True)
col_list = ['petal_length', 'petal_width', 'sepal_length', 'sepal_width'] 
cols = iter(col_list)

bins = {'sepal_length' : 10, 'sepal_width' : 5, 
        'petal_length' : 35, 'petal_width' : 12}


def myhist(x, **kwargs):
    b = bins[next(cols)]
    plt.text(0.5,0.9, f"bins = {b}", ha="center", 
             transform=plt.gca().transAxes)
    plt.hist(x, bins=b, **kwargs)


g = sns.PairGrid(iris, vars=col_list)
g = g.map_diag(myhist)
g = g.map_offdiag(plt.scatter)

plt.show()

enter image description here