matplotlib 객체 지향 인터페이스를 사용하여 seaborn으로 플로팅


103

matplotlibOOP 스타일로 사용하는 것을 강력히 선호합니다 .

f, axarr = plt.subplots(2, sharex=True)
axarr[0].plot(...)
axarr[1].plot(...)

이렇게하면 여러 그림과 하위 그림을 쉽게 추적 할 수 있습니다.

질문 :이 방법으로 seaborn을 사용하는 방법? 또는 이 예제 를 OOP 스타일 로 변경하는 방법은 무엇입니까? 확인하는 방법 seaborn과 같은 플로팅 기능을 lmplot하는 Figure또는 Axes그것으로 플롯?


1
관련 : 이 문제 와 가능한 해결 방법에 대한 이 답변 은 바다에서 태어난 그림을 만들고 나중에 모든 축을 서브 플롯 그리드로 이동할 수 있습니다.
ImportanceOfBeingErnest

답변:


229

사용하는 seaborn 기능에 따라 약간 다릅니다.

seaborn의 플로팅 기능은 크게 두 가지 클래스로 나뉩니다.

  • "축 수준"기능을 포함 regplot, boxplot, kdeplot, 등 다수
  • "그림 수준"을 포함하여 기능, lmplot, factorplot, jointplot및 하나 또는 두 개의 다른

첫 번째 그룹은 명시 적 ax인수 를 취하고 Axes객체를 반환하여 식별됩니다 . 이것이 암시하는 것처럼, 당신은 그들에게 당신 Axes을 전달함으로써 "객체 지향"스타일로 그들을 사용할 수 있습니다 :

f, (ax1, ax2) = plt.subplots(2)
sns.regplot(x, y, ax=ax1)
sns.kdeplot(x, ax=ax2)

Axes 수준의 함수는에 그려 질 뿐이며 Axes그렇지 않으면 그림과 엉망이되지 않으므로 객체 지향 matplotlib 스크립트에서 완벽하게 공존 할 수 있습니다.

두 번째 기능 그룹 (그림 수준)은 결과 플롯이 항상 "의미있는"방식으로 구성된 여러 축을 포함 할 수 있다는 사실로 구별됩니다. 즉, 함수는 그림을 완전히 제어 할 수 있어야하므로 그림을 그릴 수 없습니다.lmplot 이미 존재 합니다. 함수를 호출하면 항상 Figure를 초기화하고 그리는 특정 플롯에 맞게 설정합니다.

그러나을 호출 lmplot하면 유형의 객체가 반환됩니다 FacetGrid. 이 객체에는 플롯의 구조에 대해 약간 알고있는 결과 플롯에서 작동하는 몇 가지 메서드가 있습니다. 또한 FacetGrid.figFacetGrid.axes인수 에서 기본 그림과 축 배열을 노출합니다 . 이 jointplot기능은 매우 유사하지만 JointGrid객체를 사용 합니다. 따라서 객체 지향 컨텍스트에서 이러한 함수를 계속 사용할 수 있지만 모든 사용자 정의는 함수를 호출 한 후에 이루어져야합니다.


이것은 정말 도움이되었습니다. 여기에 내 대답에서보세요 : stackoverflow.com/questions/27019079/...
DENSON
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.