首页 > 解决方案 > 有没有办法调整pairplot()的轴限制,但不能作为单独的图?

问题描述

有没有办法调整pairplot()的轴限制,但不能作为单独的图?也许是产生更好的轴限制的设置?

我希望图的轴范围更大。我的绘图轴允许可视化所有数据,但它过于“放大”。

我的代码是:

import pandas as pd
mport matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('darkgrid')

g = sns.pairplot(iris, hue = 'species', diag_kind = 'hist', palette = 'Dark2', plot_kws={"s": 20})

我的情节的链接和我想要的情节在这里: pairplot

标签: pythonmatplotlibseaborn

解决方案


要更改子图,g.map(func, <parameters>)可以使用。一个小问题是func需要接受color作为参数,使用plt.margins()时报错color。此外,map使用xandy来表示行和列变量。plt.margin()例如,您可以编写一个简单调用的虚拟函数g.map(lambda *args, **kwargs: plt.margins(x=0.2, y=0.3))

另一种方法是循环g.axes.flat并调用ax.margins()它们中的每一个。请注意,许多轴在 x 和/或 y 方向上共享。对角线的处理方式不同;由于某种原因ax.margins需要在对角线上第二次调用。

可以设置不同颜色的直方图堆叠而不是重叠diag_kws={"multiple": "stack"}

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('darkgrid')
iris = sns.load_dataset('iris')
g = sns.pairplot(iris, hue='species', diag_kind='hist', palette='Dark2',
                 plot_kws={"s": 20}, diag_kws={"multiple": "stack"})
# g.map(plt.margins, x=0.2, y=0.2) # gives an error
for ax in g.axes.flat:
    ax.margins(x=0.2, y=0.2)
for ax in g.diag_axes:
    ax.margins(y=0.2)
plt.show()

具有更改边距的对图

PS:还有另一种选择,是更改rcParams这将对代码中稍后创建的所有图产生影响:

import matplotlib as mpl

mpl.rcParams['axes.xmargin'] = 0.2
mpl.rcParams['axes.ymargin'] = 0.2

推荐阅读