[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,)
생성 :