如何在Seaborn lmplot facetgrid中设置xlim和ylim

2024-04-24 08:42:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Seaborn的lmplot绘制一个线性回归图,用一个分类变量将我的数据集分成两组。

对于x和y,我想在两个图上手动设置下限,但将上限保留为Seaborn默认值。 下面是一个简单的例子:

import pandas as pd
import seaborn as sns
import random

n = 200
random.seed(2014)
base_x = [random.random() for i in range(n)]
base_y = [2*i for i in base_x]
errors = [random.uniform(0,1) for i in range(n)]
y = [i+j for i,j in zip(base_y,errors)]

df = pd.DataFrame({'X': base_x,
                   'Y': y,
                   'Z': ['A','B']*(n/2)})

mask_for_b = df.Z == 'B'
df.loc[mask_for_b,['X','Y']] = df.loc[mask_for_b,] *2

sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)

这将输出以下结果: enter image description here

但在这个例子中,我希望xlim和ylim是(0,*)。我试着使用sns.plt.ylim和sns.plt.xlim,但这些只影响右边的绘图。 示例:

sns.plt.ylim(0,)
sns.plt.xlim(0,)

enter image description here

如何访问FacetGrid中每个绘图的xlim和ylim?


Tags: inimportdfforbaseaspltmask
2条回答

你得自己拿着斧头。最干净的方法可能是改变你的最后一行:

lm = sns.lmplot('X','Y',df,col='Z',sharex=False,sharey=False)

然后您可以获得轴对象(轴数组):

axes = lm.axes

之后,可以调整轴属性

axes[0,0].set_ylim(0,)
axes[0,1].set_ylim(0,)

创建:

enter image description here

lmplot函数返回一个FacetGrid实例。这个对象有一个名为set的方法,您可以将key=value对传递给它,它们将设置在网格中的每个轴对象上。

其次,通过为要保留为默认值的值传递None,可以在matplotlib中仅设置轴限制的一侧。

把这些放在一起,我们有:

g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))

enter image description here

相关问题 更多 >