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


85

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


4
그런데 numpy.random모듈에 익숙해지면 무작위 데이터를 생성하는 데 많은 시간을 절약 할 수 있습니다 (매우 유용한 작업이 될 수 있습니다!). 예를 들어, 당신은 얻을 수 base_xbase_y함께 base_x = np.random.rand(n); base_y = base_x * 2. y변수는 다음과 유사 벡터화 작업을 생성 할 수 있습니다.
mwaskom

답변:


143

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

여기에 이미지 설명 입력


4
워, 간단합니다. 문서를 보면 g.set모든 서브 플롯이 바뀌는 것 같습니다 . g.axes가 권장되는 방법으로 각각을 개별적으로 설정합니까?
exp1orer

6
네, 패싯 중 하나 (또는 ​​전부는 아님)에 일부 속성을 설정하려면 g.axesDrV가 제안한대로 배열을 사용해야합니다.
mwaskom

1
이것은 받아 들여진 대답이어야합니다. 5 년이 지난 후에도 여전히 작동하며 받아 들여진 답변보다 더 효율적입니다.
bbennett36

81

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

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

생성 :

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.