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 함수는 matplotlib와 별개로 seaborn 에서 figure를 만들어 plotting한다고 볼 수 있습니다.
그러므로 figure-level 함수를 사용하여 seaborn을 사용하면 facetgrid(seaborn의 figure를 쓰는명령어)를 통해 레이아웃을 변경 할 수 있습니다.
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이 그래프 안에 있습니다.
-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))
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)")
f, ax = plt.subplots()
f, ax = plt.subplots(1, 2, sharey=True)
장점:
데이터 변수에 의한 쉬운 패싱
기본적으로 그래프 외부에 범례 위치
쉬운 figure-level 사용자 정의
단점:
함수 서명에 많은 매개변수가 없음
matplotlib의 더 큰 figure에 포함될 수 없음
matplotlib과 다른 API
다른 figure 크기 매개변수화
끝 이만 총총