파이썬 matplotlib에서 원하는 임의의 위치에 서브플랏 그리거나, 겹쳐서 그리는 법
개요
plt.subplot
이나 gridspec
을 이욯하면 격자 기반의 간단하거나 복잡한 레이아웃으로 서브플랏을 그릴 수 있다. 본 글에서는 격자에 의존하지 않고, 사용자가 원하는 완전히 임의의 위치에 서브플랏을 그리는 방법을 소개한다.
코드
fig.add_axes([left, bottom, width, height])
add_axes
를 이용하면 figure 위의 원하는 위치에 새 서브플랏을 생성할 수 있다. 이때 서브플랏의 영역은 입력 인수인 [left, bottom, width, height]
으로 결정된다. 각 항목은 전체 figure에서의 비율을 나타내므로 left
, bottom
, width
, height
을 만족해야한다. 가령 fig.add_axes([0.1, 0.1, 0.2, 0.3])
은 왼쪽에서부터 전체 가로길이의 만큼 떨어지고 아래에서부터 전체 세로길이의 만큼 떨어진 곳에, 전체 figure 크기에 비례해서 크기의 서브플랏을 만든다. 위치의 기준은 서브플랏의 좌하단이다.
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