화면 분할
화면 상에 view를 분할 및 추가하여 다양한 관점 전달
fig = plt.figure()
ax = fig.add_subplot(121)
ax = fig.add_subplot(122)
# --------------------------------------------
fig, (ax1, ax2) = plt.subplots(1, 2) # fig, axes로 선언하고 axes[0]으로 접근 가능
dpi : 해상도, plot의 선명한 정도
fig.savefig(’파일명’, dpi = 150)
sharex, sharey : subplot들이 축을 공유
fig, axes = plt.subplots(1, 2, sharey=True)
# ----------------------------
ax1.plot([1, 2, 3], [1, 4, 9])
ax2 = fig.add_subplot(122, sharey=ax1)
두 방법 모두 축을 공유하는 plot 생성 코드
squeeze & flatten
subplots()로 생성하면 기본적으로 다음과 같이 서브플롯 ax 배열이 생성됩니다.
- 1 x 1 : 객체 1개 (ax)
- 1 x N 또는 N x 1 : 길이 N 배열 (axes[i])
- N x M : N by M 배열 (axes[i][j])
numpy ndarray에서 각각 차원이 0, 1, 2로 나타납니다.
이렇게 되면 경우에 따라 반복문을 사용할 수 있거나, 없거나로 구분됩니다.
squeeze를 사용하면 항상 2차원으로 배열을 받을 수 있고,
가변 크기에 대해 반복문을 사용하기에 유용합니다.
n, m = 1, 3
fig, axes = plt.subplots(n, m, squeeze=False, figsize=(m*2, n*2))
for i in range(n):
for j in range(m):
axes[i][j].set_title(idx)
axes[i][j].set_xticks([])
axes[i][j].set_yticks([])
idx+=1
squeeze=False
로 차원을 추가해주며, 2차원 배열로 받아 plot을 조작할 수 있다.n, m = 2, 3
fig, axes = plt.subplots(n, m, figsize=(m*2, n*2))
for i, ax in enumerate(axes.flatten()):
ax.set_title(i)
ax.set_xticks([])
ax.set_yticks([])
aspect
fig = plt.figure(figsize=(8, 5))
gs = fig.add_gridspec(3, 3) # make 3 by 3 grid (row, col)
ax = [None for _ in range(5)]
ax[0] = fig.add_subplot(gs[0, :])
ax[0].set_title('gs[0, :]')
ax[1] = fig.add_subplot(gs[1, :-1])
ax[1].set_title('gs[1, :-1]')
ax[2] = fig.add_subplot(gs[1:, -1])
ax[2].set_title('gs[1:, -1]')
ax[3] = fig.add_subplot(gs[-1, 0])
ax[3].set_title('gs[-1, 0]')
ax[4] = fig.add_subplot(gs[-1, -2])
ax[4].set_title('gs[-1, -2]')
for ix in range(5):
ax[ix].set_xticks([])
ax[ix].set_yticks([])
plt.tight_layout()
gs = fig.add_gridspec(3, 3)
3 by 3 plot grid원하는 위치에 plot을 만듦
fig.add_axes(x, y, dx, dy)
추천하지 않음
plot안에 plot을 그림
fig, ax = plt.subplots()
axin = ax.inset_axes([0.8, 0.8, 0.2, 0.2])
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
fig, ax = plt.subplots(1, 1)
ax_divider = make_axes_locatable(ax)
ax = ax_divider.append_axes("right", size="7%", pad="2%")
ax_divider.append_axes("right", size="7%", pad="2%")
※ 모든 이미지 및 코드 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※