[python] Seaborn lmplot facetgrid에서 xlim 및 ylim을 설정하는 방법

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에 어떻게 액세스 할 수 있습니까?



답변

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

여기에 이미지 설명 입력


답변

축 자체를 잡아야합니다. 아마도 가장 깨끗한 방법은 마지막 행을 변경하는 것입니다.

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

그런 다음 axes 객체 (축 배열)를 얻을 수 있습니다.

axes = lm.axes

그 후에 축 속성을 조정할 수 있습니다.

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

생성 :

여기에 이미지 설명 입력


답변