다중 플롯 작성
Figure-level 함수는 유사한 종류의 플롯을 작성할 수 있으므로 다른 종류 예를 들어 산점도와 히스토그램을 동시에 작성하기 위해서는 axes-level 함수를 사용해야 합니다. 또한 이 레벨의 함수는 matplotlib에 의존하므로 플롯의 레이아웃을 설정하기 위해 subplots() 함수를 적용할 수 있습니다.
import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams['font.family'] ='NanumGothic' plt.rcParams['axes.unicode_minus'] =False import seaborn as sns
pen=sns.load_dataset("penguins")
fig, axs=plt.subplots(1,2, figsize=(8,3), gridspec_kw=dict(width_ratios=[4,3])) sns.scatterplot(data=pen, x="flipper_length_mm", y="bill_length_mm", hue="species", ax=axs[0]) sns.histplot(data=pen, x="species", hue="species", shrink=.8, alpha=.8, legend=False, ax=axs[1]) fig.tight_layout()
위 코드에서 plt.subplots() 함수의 인수 gridspec_kw는 각 subplots의 레이아웃에 대한 값들을 사전(dictionary)형식으로 지원하기 위한 매개변수입니다.
figure-level 함수는 다른 종류의 그래프들로 구성된 다중 플롯을 작성 할 수 없습니다. 즉, 이 수준의 함수는 초기화를 포함하여 자신의 플롯을 독점적으로 소유하므로 위의 axes-level 함수와 같이 전체 플롯을 분리하여 사용하는 것을 허락하지 않습니다. 그러나 동일한 축에 여러 형태의 플롯을 추가하는 것은 가능합니다.
다음 함수 relplot()
을 작성한 그림 틀인 g에 axline()
을 작성합니다. 이 함수의 xy1은 line 이 통과하는 지점입니다. 매개변수 dashes=(5, 2)는 대시 길이가 5, 공백길이가 2로 지정한 것입니다.
tips=sns.load_dataset('tips') tips.head(3)
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
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)) plt.show()
relplot() 함수의 인수 col에 변수를 지정하여 여러개의 플롯을 작성할 수 있습니다. 지정한 변수는 여러개의 클래스가진 것으로 각 클래스에 대응하는 산점도로 선그래프를 작성합니다. 다음은 데이터 pen에 대한 것으로 male과 female의 클래스를 가진 변수 sex를 col에 전달하여 각 클래스에 대응하는 산점도를 작성한 것입니다.
g=sns.relplot(data=pen, x="flipper_length_mm", y="bill_length_mm", col="sex") g.set_axis_labels("Flipper length (mm)", "Bill length (mm)") plt.show()
relplot() 함수의 인수 col과 row에 변수를 지정하는 것으로 위 플롯을 확장할 수 있습니다. 다음 코드는 데이터 tips의 변수 sex와 time에 의해 다중 플롯을 작성한 것입니다.
g=sns.relplot(data=tips, x="total_bill", y="tip", col="sex", row="time") plt.show()
위와 같은 figure-level 함수에 다중 플롯을 작성하기 위해 FacetGrid()
함수와 map()
함수를 사용할 수 있습니다.
g=sns.FacetGrid(tips, col="time", row="sex") g.map(sns.scatterplot, "total_bill", "tip") g.set_axis_labels("Total", "Tip") plt.show()
댓글
댓글 쓰기