我使用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)
这输出以下内容:
但是在这个例子中,我喜欢xlim和ylim(0,*)。我尝试使用sns.plt.ylim和sns.plt.xlim但这些只影响右手图。 例如:
sns.plt.ylim(0,)
sns.plt.xlim(0,)
如何访问FacetGrid中每个绘图的xlim和ylim?
答案 0 :(得分:102)
lmplot
函数返回FacetGrid
个实例。此对象有一个名为set
的方法,您可以将key=value
对传递给它,它们将在网格中的每个Axes对象上设置。
其次,您可以通过将None
传递给您想要保留为默认值的值,在matplotlib中仅设置Axes限制的一侧。
把这些放在一起,我们有:
g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))
答案 1 :(得分:61)
你需要掌握轴本身。可能最干净的方法是改变你的最后一行:
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,)
创建: