파이썬 matplotlib에서 원하는 임의의 위치에 서브플랏 그리거나, 겹쳐서 그리는 법
개요
plt.subplot
이나 gridspec
을 이욯하면 격자 기반의 간단하거나 복잡한 레이아웃으로 서브플랏을 그릴 수 있다. 본 글에서는 격자에 의존하지 않고, 사용자가 원하는 완전히 임의의 위치에 서브플랏을 그리는 방법을 소개한다.
코드
fig.add_axes([left, bottom, width, height])
add_axes
를 이용하면 figure 위의 원하는 위치에 새 서브플랏을 생성할 수 있다. 이때 서브플랏의 영역은 입력 인수인 [left, bottom, width, height]
으로 결정된다. 각 항목은 전체 figure에서의 비율을 나타내므로 $0 \le$ left
, bottom
, width
, height
$\le 1$을 만족해야한다. 가령 fig.add_axes([0.1, 0.1, 0.2, 0.3])
은 왼쪽에서부터 전체 가로길이의 $1/10$만큼 떨어지고 아래에서부터 전체 세로길이의 $1/10$만큼 떨어진 곳에, 전체 figure 크기에 비례해서 $0.2 \times 0.3$ 크기의 서브플랏을 만든다. 위치의 기준은 서브플랏의 좌하단이다.
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.2, 0.3])
ax1.plot(np.random.randn(10))
plt.show()
완전히 임의의 위치에 그릴 수 있기 때문에 겹쳐서도 그릴 수 있다. 먼저 그린 그림이 밑에 깔리게 된다.
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.4, 0.8])
ax1.plot(np.random.randn(10))
ax2 = fig.add_axes([0.4, 0.5, 0.4, 0.4])
plt.bar(np.arange(10), np.random.randn(10))
ax3 = fig.add_axes([0.7, 0.4, 0.2, 0.2])
ax3.scatter(np.random.randn(10), np.random.randn(10))
plt.show()
환경
- OS: Windows11
- Version: Python 3.9.13, matplotlib==3.6.2, numpy==1.23.5