首页 > 解决方案 > 我可以将轴范围传递给 seaborn 中的 PairGrid 吗?

问题描述

我想在绘制时定义 PairGrids 上的轴范围。我知道我可以在绘图后调整这些,但我想将 hexbins 映射到绘图,如果我在事后进行调整,它将被扭曲。matplotlib.pyplot.hexbin接受一个范围参数,允许我在绘图期间定义范围。我可以在使用带有两个变量的 FacetGrid 时传递这个参数。

我想为 pandas 数据框中的每个变量提供一个范围列表,以便我可以比较可能具有不同值范围(例如irisiris_2)的数据集之间的图。

import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm

iris = sns.load_dataset("iris")
# Create second dataset I'd like to compare, but has different range of values
iris_2 = iris.copy()
iris_2[iris_2.columns[0:4]] = iris_2[iris_2.columns[0:4]] + 2

def hexbin(x, y, **kws):
    cmap = sns.light_palette(kws.pop("color"), as_cmap=True)
    plt.hexbin(x, y, cmap=cmap, mincnt=1, **kws)

g = sns.FacetGrid(iris, col="species")
g = g.map(hexbin, 'sepal_width', 'sepal_length', norm=LogNorm(),
          gridsize=10, extent=[1, 5, 4, 10])

在此处输入图像描述 这是我要修改的代码。

g = sns.PairGrid(iris, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)

在此处输入图像描述

绘制第二个数据集时,不清楚数据集有何不同,因为轴已针对各个数据集进行了调整。

g = sns.PairGrid(iris_2, diag_sharey=False)
g.map_diag(sns.kdeplot, lw=3, legend=False, shade=True)
g.map_lower(hexbin, gridsize=10, norm=LogNorm())
g.map_upper(plt.scatter, s=3)

在此处输入图像描述

在我的具体情况下,理想的解决方案可能看起来像一个字典,每个数据框列都有所需的范围:

extent_dict = {'sepal_length': [4, 10], 'sepal_width': [2, 7],
               'petal_length': [0, 10], 'petal_width': [0, 4.5]}

标签: pythonseaborn

解决方案


推荐阅读