안녕하세요~ 꽁냥이입니다. 여러 그래프를 그릴 때 때로는 y축(또는 x축)의 범위를 통일시킬 필요가 있습니다. 같은 스케일에서 비교를 용이하게 하기 위함이지요. Matplotlib에서는 sharex, sharey를 이용하여 축 범위를 통일시킬 수 있습니다. 이번 포스팅에서는 Matplotlib에서 여러 그래프를 그릴 때 x축, y축 범위를 공유하는 방법을 알아보겠습니다.
축 범위 공유하기 (feat. sharex, sharey)
우선 여러 그래프를 그릴 때에는 subplots를 사용하는데 sharex, sharey 인자는 각각 x, y축 범위를 통일시킬 수 있게하는 인자입니다. sharex(또는 sharey)는 부울(bool) 값을 받거나 'none', 'all', 'row', 'col' 4가지 타입의 문자열을 받습니다. 문자열의 의미는 아래와 같습니다.
'none' : 축 범위 공유안함,
'all' : 모든 그래프에 대하여 범위 공유,
'row' : 행 방향으로 범위 공유,
'col' : 열 방향으로 범위 공유
이때 'none'은 False와 같고 'all'은 True와 같습니다.
이제 사용법을 구체적으로 알아보겠습니다. 아래 코드는 x, y축 범위를 하나도 공유하지 않는 그래프 4개를 그립니다.
import matplotlib.pyplot as plt
plt.rcParams['axes.unicode_minus'] = False
import numpy as np
## generate toy data
np.random.seed(100)
sample_size = 50
x = [np.random.rand(sample_size)+i for i in range(4)]
y = [np.random.randn(sample_size)*(2/(i+1))+i for i in range(4)]
sharey = 'none' ## 또는 sharey=False
sharex = 'none' ## 또는 sharex=False
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2,
sharey=sharey,
sharex=sharex,
figsize=(8,8)
)
fig.set_facecolor('white')
ax1.scatter(x[0], y[0])
ax2.scatter(x[1], y[1])
ax3.scatter(x[2], y[2])
ax4.scatter(x[3], y[3])
plt.suptitle(f"sharey : {sharey}, sharex : {sharex}", y=0.95, fontsize=15)
plt.show()
위 그림을 보면 모든 축이 각자 범위대로 그려진 것을 알 수 있습니다. sharex, sharey 각각 4가지 타입의 범위를 지정할 수 있으므로 총 16가지 방법으로 축 범위를 공유할 수 있습니다. 아래 그래프는 sharex를 'none'으로 고정시켜놓고 sharey를 바꿔보면서 그린 결과입니다.
이때 row와 all의 차이점은 row는 같은 행의 있는 데이터의 범위를 통일시키는 것이며 행이 다른 경우 범위가 달라집니다. 하지만 all은 모든 행에 대하여 범위가 같습니다. col도 이와 비슷합니다.
sharex, sharey를 이용하면 set_xlim이나 set_ylim을 이용하여 일일이 지정할 필요가 없이 범위를 통일시킬 수 있습니다. 이번 내용은 자주 사용되는 내용이므로 기억해두시면 좋습니다. 다음에도 좋은 주제로 찾아뵐 것을 약속드리며 이상 포스팅 마치겠습니다. 지금까지 꽁냥이의 글 읽어주셔서 감사합니다.
'데이터 분석 > 시각화' 카테고리의 다른 글
[Matplotlib] Tip! add_patch와 PatchCollection 비교 (2) | 2023.01.04 |
---|---|
[Matplotlib] Tip! 좌표축 Axes의 가로 세로 길이 Inche 단위로 알아보기 (feat. get_window_extent, dpi_scale_trans) (2) | 2023.01.03 |
[Matplotlib] 한 라인에 컬러 맵(Color Map) 적용하기 (feat. LineCollection) (0) | 2022.10.30 |
[Matplotlib] 한 라인에 여러 색상 적용하기 (feat. LineCollection) (0) | 2022.10.30 |
[graphviz] subgraph와 cluster 그려보기 (2) | 2022.10.26 |
댓글