지금은마라톤중

Seaborn Tutorial (6)_Figure-level vs. axes-level functions 본문

STUDY/seaborn Tutorial

Seaborn Tutorial (6)_Figure-level vs. axes-level functions

달리는중 2023. 3. 13. 20:42

시본 함수는 축 중심과 도표 중심의 함수로 나눌 수 있다.
축 중심 그래프는 matplotlib.pyplot.Axes 를 통해 표현하고, 그림 중심 그래프는 FaceGrid 통해 matplotlib와 인터페이스한다.

예를들어 displot()은 분포 모듈의 그림 중심 함수이다. 그 중 histplot()이 있다.

 

sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack")

# 커널 밀도 그래프로 그리릴면, 같은 코드에서 kind 파라미더를 "kde"로 지정하면 된다.
sns.displot(data=penguins, x="flipper_length_mm", hue="species", multiple="stack", kind="kde")

그림 중심의 플롯은 대부분 축 중심 플롯과 비슷해 보이지만, 몇 가지 차이점이 있다. 
그림 수준 함수가 제공하는 가장 융용한 기능은 여러 하위 플롯으로 그림을 쉽게 만드는 것이다 .
예를들어 평귄의 각 종에 대한 세가지 분포를 같은 축에 쌓는 대신, 열로 각각 나열하여 그릴 수 있다.

 

sns.displot(data=penguins, x="flipper_length_mm", hue="species", col="species")

그림 중심 함수는 축 중심에 대응하여 히스토그램의 bin 크기 같은 아규먼트를 기본으로 제공한다.
이것은 그림 중심 함수가 덜 유연하지 않다는 것이다, 그러나 함수 sigature나 docstring에 써있는 않다는 것은 단점이다. 

 

축 수준의 함수는 독립적인 플롯을 만든다

축 수준 함수는 matplotlib 함수의 드롭인 대체물처럼 작동하도록 작성되었다.
그들이 자동으로 축 라벨과 범례를 추가하는 동안, 그들이 그려진 축을 넘어서는 아무것도 수정하지 않는다.
그것은 그들이 예측 가능한 결과를 가진 임의로 복잡한 matplotlib 수치로 구성될 수 있다는 것을 의미한다.

축 레벨 함수 호출matplotlib.pyplot.gca() 내부적으로 matplotlib 상태-머신 인터페이스에 연결하여 "현재 활성" 축에 플롯을 그립니다. 
하지만 그들은 또한 객체 지향 인터페이스와 통합되고 각 플롯이 어디로 가야 하는지 정확히 지정할 수 있는 ax= 인수를 받아들인다.

 

f, axs = plt.subplots(1, 2, figsize=(8, 4), gridspec_kw=dict(width_ratios=[4, 3]))
sns.scatterplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", hue="species", ax=axs[0])
sns.histplot(data=penguins, x="species", hue="species", shrink=.8, alpha=.8, legend=False, ax=axs[1])
f.tight_layout()

그림 수준의 함수는 그들의 그림을 소유한다.

대조적으로, 그림 수준의 함수는 다른 플롯으로 (쉽게) 구성될 수 없다. 
설계상, 그들은 초기화를 포함하여 자신의 그림을 "소유"하므로, 그림 수준의 함수를 사용하여 기존 축에 플롯을 그리는 개념이 없다. 
이 제약은 그림 수준의 함수가 범례를 플롯 외부에 두는 것과 같은 기능을 구현할 수 있게 해준다.

그럼에도 불구하고, 그들이 반환하는 객체의 matplotlib 축에 액세스하고 그런 식으로 플롯에 다른 요소를 추가하여 그림 수준 함수가 제공하는 것을 넘어설 수 있습니다.

tips = sns.load_dataset("tips")
g = sns.relplot(data=tips, x="total_bill", y="tip")
g.ax.axline(xy1=(10, 2), slope=.2, color="b", dashes=(5, 2))

 그림 레벨 함수에서 플롯 사용자 지정

 그림 수준의 함수는 a를 반환한다FacetGrid 예를 들어, 하위 플롯 조직에 대해 "똑똑한" 방식으로 플롯의 속성을 사용자 정의하는 몇 가지 방법이 있습니다.
 예를 들어, 한 줄의 코드를 사용하여 외부 축의 라벨을 변경할 수 있습니다:

 

g = sns.relplot(data=penguins, x="flipper_length_mm", y="bill_length_mm", col="sex")
g.set_axis_labels("Flipper length (mm)", "Bill length (mm)")

 

 

그림 크기 지정하기

Matplotlib 플롯의 크기를 늘리거나 줄이려면 전역 rcParams에서 전체 그림의 너비와 높이를 설정하면서 플롯을 설정합니다(예: matplotlib.pyplot.subplots()의 figsize 매개 변수),
또는 그림 객체에서 메서드 호출(예: matplotlib.Figure.set_size_inches()

그림 수준의 기능을 사용할 때, 몇 가지 주요 차이점이 있다. 
첫째, 함수 자체는 그림 크기를 제어하는 매개 변수 가지고 있다 (비록 이것들은 실제로 기본 매개 변수이지만)그림을 관리하는 FacetGrid). 
둘째, 이러한 매개 변수, 높이 및 측면은 matplotlib의 너비, 높이 매개 변수화와 약간 다르게 크기를 매개 변수화합니다(바다에서 태어난 매개 변수 사용, 너비 = 높이 * 측면). 
가장 중요한 것은, 매개 변수가 전체 그림의 크기가 아니라 각 하위 플롯의 크기에 해당한다는 것이다.

이러한 접근 방식의 차이점을 설명하기 위해, 여기에 하나의 하위 플롯이 있는 matplotlib.pyplot.subplots()의 기본 출력이 있습니다.

 

f, ax = plt.subplots()

f, ax = plt.subplots(1, 2, sharey=True)

 

 

# 대조적으로, 그림 수준의 함수에 의해 생성된 플롯은 정사각형이 될 것이다. 
# 그것을 증명하기 위해, 사용하여 빈 플롯을 설정합시다.FacetGrid직접.
# 이것은 다음과 같은 기능의 무대 뒤에서 일어난다.relplot(),displot(), 또는catplot():

g = sns.FacetGrid(penguins)

g = sns.FacetGrid(penguins, col="sex")

g = sns.FacetGrid(penguins, col="sex", height=3.5, aspect=.75)

 

 

수치 수준의 함수의 상대적인 장점

다음은 우리가 위에서 논의한 장단점에 대한 요약입니다:

 

균형적으로, 그림 수준의 기능은 초보자를 더 혼란스럽게 만들 수 있는 추가적인 복잡성을 추가하지만, 그들의 뚜렷한 기능은 그들에게 추가적인 힘을 준다. 
튜토리얼 문서는 약간 더 깨끗한 플롯을 생성하기 때문에 대부분 그림 수준의 기능을 사용하며, 
일반적으로 대부분의 응용 프로그램에 사용하는 것이 좋습니다. 
그들이 좋은 선택이 아닌 한 가지 상황은 여러 가지 다른 플롯 종류를 구성하는 복잡하고 독립적인 그림을 만들어야 할 때이다. 
이 시점에서, matplotlib을 직접 사용하여 그림을 설정하고 축 수준 함수를 사용하여 개별 구성 요소를 채우는 것이 좋습니다.

Comments