Seaborn tutorial study 5

김상민·2023년 2월 9일
0

self-directed learning

목록 보기
5/7
post-custom-banner

Overview of seaborn plotting functions (seaborn plootting 기능 개요)

  • seaborn과 상호작용은 대부분 plotting function 을 통해 이루어 진다. 튜토리얼의 후반부에는 각 기증에서 제공하는 특정 기능에 대해서 설명합니다. 이번 장에서는 다양한 종류의 기능을 높은 수준으로 소개햡니다.

Similar functions for similar tasks (유사한 작업에 대한 유사한 기능)

  • seaborn namespace는 flat하며 기능은 최상위 수준에서 엑세스 할수 있고 코드 자체는 서로 다른 수단을 통해 유사한 시각화 목표를 달성하는 기능 모듈로 계층적으로 구조화 되어있습니다. 대부분의 문서는 이러한 모듈을 중심으로 구성되어있습니다. "관계형", "분포형", "범부형

  • 예를 들어 분포 모듈은 데이터 점의 분포를 나타내는 특화된 함수이고 여기는 히스토그램같은 익숙한 방법도 포함 됩니다.

-- 공식 문서의 어려운 말을 끝내고 들어가보자

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


hue를 통해 날개 길이 : 펭귄 종별 분포 시각화 했다.)

저번 챕터에서 활용했던 펭귄 데이터를 활용하고 있다. 날개 길이가 긴 종의 수를 멀티 히스토그램 스택바 로 표현해 주고있다. 한눈에 봐도 초록색종이 날개가 평균적으로 길다는 것을 알 수 있다.

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


커널 밀도 함수(kdeplot())를 통해 곡선 그래프를 만들었다.
뒤 배경이 달라진건

sns.set_theme()
  • 기본테마 적용

Figure-level vs. axes-level functions

  • seaborn은 크게 두가지 함수로 나뉘어져 있다고 합니다. q바로 Figure-level, axes-level dlqslek.
  1. figure-level 함수는 matplotlib와 별개로 seaborn 에서 figure를 만들어 plotting한다고 볼 수 있습니다.
    그러므로 figure-level 함수를 사용하여 seaborn을 사용하면 facetgrid(seaborn의 figure를 쓰는명령어)를 통해 레이아웃을 변경 할 수 있습니다.

  2. axes-level 함수는 문자 그대로 axes수준에서 plotting 한다는 말 입니다, figure-level과 다르게 matplotlib에서 axes를 그립니다.
    따라서 plt.figure()와 같은 메소드로 레이아웃을 변경합니다.


seaborn 튜토리얼에 있는 그림입니다. 이 그림에서 큰 박스 replot, displot, catplot은 figure-level함수이고 아래 작은 함수들은 axes-level함수 입니다.

-ex) figure-level
첫번째 펭귄 그래프에서 figure-level함수를 이용해 서브 플롯으로 종별 그래프로 시각화 했다.마치 groupby를 쓴 듯한 모습이다.

-ex) axes-level

axes함수는 matplotlib함수의 drop-in 대체처럼 작동합니다. axis labels과 범례는 자동으로 추가되지만 그려진 축 외에는 수정되지 않습니다. 즉 예측가능한 결과를 가진 임의 복잡한 matplotlib 수치로 구성할 수 있습니다.

import matplotlib.pyplot as plt
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()


-ax 파라미터를 통해 plotting할 곳을 지정해 줄수 있습니다
-label이 그래프 안에 있습니다.


Figure-level functions own their figure

-matplotlib의 그림 수준 함수는 그림을 만들고 초기화를 포함하여 전체 그림을 "소유"하도록 설계되었습니다. 이러한 그래프는 다른 그래프와 쉽게 결합할 수 없지만 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))

Customizing plots from a figure-level function(figure-level 함수 커스텀하기)

  • FacetGrid 인스턴스(instance)를 반환합니다. FacetGrid 인스턴스(instance)는 하위 플롯 구성을 인식하는 방식으로 플롯 속성을 사용자 지정하는 방법을 제공합니다. 예를 들어, 코드 한 줄로 외부 축 레이블을 변경할 수 있습니다.
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 API의 일부가 아니어서 figure-level 수준 함수 사용할 때만 존재한다는 점을 기억해야 해서 약간 복잡합니다.

Specifying figure sizes(그림 크기 지정)

  • matplotlib에서 전체 그림의 너비와 높이를 설정하거나 그림 개체에 메소드를 호출하여 그림의 크기를 늘리거나 줄일 수 있습니다. seaborn에서 축 수준 함수(axes-level)를 사용할 때 크기는 그림의 크기와 축 레이아웃에 따라 결정됩니다. seaborn의 그림 수준 함수(figure-level)에는 그림 크기를 제어하는 매개 변수가 있으며, 이 매개 변수는 전체 그림 크기가 아니라 각 하위 그림의 크기에 해당합니다. 높이 및 가로 세로 매개변수는 매트플롯 립의 너비, 높이 매개변수화와 다른 크기를 결정합니다.
f, ax = plt.subplots()

  • 여러 개의 열이 있는 그림은 전체 크기가 동일하지만 공간에 맞도록 축이 수평으로 압착됩니다:
f, ax = plt.subplots(1, 2, sharey=True)

  • sharey = True를 통해서 보기 좋게 나눠주는 것같다
    sharey = True를 제거하니

    가운데가 겹친다. sharey=False도 똑같다.

장점:
데이터 변수에 의한 쉬운 패싱
기본적으로 그래프 외부에 범례 위치
쉬운 figure-level 사용자 정의

단점:
함수 서명에 많은 매개변수가 없음
matplotlib의 더 큰 figure에 포함될 수 없음
matplotlib과 다른 API
다른 figure 크기 매개변수화

끝 이만 총총

profile
꾸준히 하고싶다
post-custom-banner

0개의 댓글