我是seaborn
的新手,并且目前正在使用pairplot
功能...通过以下操作
seaborn.pairplot(data,
hue="Class",
diag_king="hist",
diag_kws={'alpha'=0.5}
)
我能够实现我想要的大部分内容:pandas
数据帧data
的散点图网格,根据Class
列具有单独的分布,并且半沿对角线的透明直方图。
我发现将bin=[...]
传递给diag_kws
可以使所有对角线图都采用该合并,但我希望将数据帧的每一列都从专用词典中进行分箱(使用键来命名列名)。
是否可以使用diag_kws
来实现?还是我需要在调用pairplot
之后手动访问每个对角线图并手动重新绑定它们?最有效的方法是什么?
答案 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()