여러 개의 그래프 그리기
그리드
그리드를 이용하면 범주형 변수로 그래프를 나눠서 그릴 수 있습니다.
import seaborn as sns
df = sns.load_dataset('tips')
df.head()
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 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
다음은 time
에 따라 그래프를 행으로 나눠 그리고, 각 그래프는 가로축은 total_bill
, 세로축은 tip
인 산점도(scatterplot
)을 그리는 예입니다.
grid = sns.FacetGrid(data=df, row='time')
grid.map(sns.scatterplot, "total_bill", "tip")
<seaborn.axisgrid.FacetGrid at 0x133158d4978>
다음은 day
에 따라 그래프를 열로 나눠 그리고, 각 그래프는 가로축은 time
, 세로축은 tip
인 stripplot
을 그리는 예입니다.
grid = sns.FacetGrid(data=df, col='day')
grid.map(sns.stripplot, "time", "tip")
<seaborn.axisgrid.FacetGrid at 0x1331577feb8>
row_order
로 행의 순서를, col_order
로 열의 순서를 지정할 수 있습니다.
grid = sns.FacetGrid(data=df, col='smoker', col_order=['No', 'Yes'])
grid.map(sns.scatterplot, "total_bill", "tip")
<seaborn.axisgrid.FacetGrid at 0x13315aefa20>
2개의 그래프를 하나의 그림에 그리기
직접 관련이 없는 2개 그래프를 하나의 그림에 그리려면 matplotlib
의 subplots
를 사용하면 됩니다.
import matplotlib.pyplot as plt
subplots
로 먼저 2개의 그래프가 들어갈 자리를 확보합니다.
fig, ax = plt.subplots(ncols=2)
왼쪽 그래프 ax[0]
에는 total_bill
과 tip
의 산점도를 그립니다.
sns.scatterplot("total_bill", "tip", data=df, ax=ax[0])
fig
오른쪽 그래프 ax[1]
에는 size
와 tip
의 stripplot
을 그립니다.
sns.stripplot("size", "tip", data=df, ax=ax[1])
fig
실제로 할 때는 이렇게 한 번에 그리면 됩니다.
fig, ax = plt.subplots(ncols=2)
sns.scatterplot("total_bill", "tip", data=df, ax=ax[0])
sns.stripplot("size", "tip", data=df, ax=ax[1])
<matplotlib.axes._subplots.AxesSubplot at 0x13316ff1f60>