Как установить xlim и ylim в Seaborn lmplot facetgrid
Я использую 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]()
Как я могу получить доступ к xlim и ylim для каждого графика в FacetGrid?
Ответы
Ответ 1
Вам нужно овладеть осями. Вероятно, самый чистый способ - изменить вашу последнюю строку:
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]()
Ответ 2
Функция lmplot
возвращает экземпляр FacetGrid
. Этот объект имеет метод set
, к которому вы можете передать пары key=value
, и они будут установлены на каждом объекте Axes в сетке.
Во-вторых, вы можете установить только одну сторону предела Axes в matplotlib, передав None
для значения, которое вы хотите оставить по умолчанию.
Объединяя их, мы имеем:
g = sns.lmplot('X', 'Y', df, col='Z', sharex=False, sharey=False)
g.set(ylim=(0, None))
![enter image description here]()