108

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

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

import pandas as pd
import seaborn as sns
import numpy as np

n = 200
np.random.seed(2014)
base_x = np.random.rand(n)
base_y = base_x * 2
errors = np.random.uniform(size=n)
y = base_y + errors

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

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)

这将输出以下内容: 在此处输入图像描述

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

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

在此处输入图像描述

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

4

2 回答 2

178

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

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

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

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

在此处输入图像描述

更新

  • 位置参数,sharex并且shareyseaborn 0.11
g = sns.lmplot(x='X', y='Y', data=df, col='Z', facet_kws={'sharey': False, 'sharex': False})
g.set(ylim=(0, None))
于 2014-08-08T23:19:53.093 回答
89

您需要自己掌握轴。可能最干净的方法是更改​​最后一行:

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,)

创建:

在此处输入图像描述

于 2014-08-08T23:00:00.743 回答