seabornpairgrid 内热图上的自定义 bin 大小?

问题描述 投票:0回答:1

我有一个用例,我会定期接收相同格式的数据,并希望快速比较每个变量的单独分布以及成对/双变量分布。我最初使用 sns.pairplot 开箱即用,但我意识到散点图不太适合我的应用程序:有时我有不同数量的数据,并且数据的边界总是不同的。因此,我想创建所有直方图,并根据我对变量的了解选择一致的箱大小。

我找到了一个很好的答案,它帮助我使用 sns.pairgird 沿着对角线和我想要的垃圾箱执行自定义直方图函数(https://stackoverflow.com/a/56387759)。现在我想对较低的联合分布执行相同的操作,但我不确定如何执行此操作,因为单个函数在不知道它对应于哪个变量的情况下获取数据。下面是基于上面链接的答案的示例代码。

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.hist(x, bins=b, **kwargs)

def pairgrid_heatmap(x, y, **kws):
    # how to retrieve correct bins here, given only x,y?

    cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
    plt.hist2d(x, y, cmap=cmap, cmin=1, **kws)

g = sns.PairGrid(iris, vars=col_list)
g = g.map_diag(myhist)
g = g.map_offdiag(pairgrid_heatmap)
plt.show()
python matplotlib seaborn
1个回答
0
投票

作为自定义函数的参数给出的

x
y
是 pandas Series,类似于数据框的一列。获取
x.name
将给出列名称。您可以使用该名称在
bins
字典中建立索引。

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']
bins = {'sepal_length': 10, 'sepal_width': 5, 'petal_length': 35, 'petal_width': 12}

def myhist(x, **kwargs):
    plt.hist(x, bins=bins[x.name], **kwargs)

def pairgrid_heatmap(x, y, **kws):
    cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
    # retrieving the bins, given names of the x and y series
    plt.hist2d(x, y, cmap=cmap, cmin=1, bins=[bins[x.name], bins[y.name]], **kws)

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

sns.pairgrid customizing bin edges

© www.soinside.com 2019 - 2024. All rights reserved.