개요
Matplotlib에서 3D 패치 컬렉션을 그리려면 mpl_toolkits.mplot3d.art3d 모듈의 pathpatch_2d_to_3d() 메서드를 활용하면 됩니다. 이 메서드는 2D PathPatch 객체를 3D 공간으로 변환해 주기 때문에, 원(Circle)과 같은 2D 패치를 x, y, z 평면 어디에든 자유롭게 배치할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- 새로운 figure를 생성하거나 기존 figure를 활성화합니다.
- 현재 축(axes)을 가져온 뒤 projection을 '3d'로 지정합니다.
- ["x", "y", "z"] 리스트를 반복하면서 Circle 패치를 생성하고, pathpatch_2d_to_3d() 메서드를 사용하여 PathPatch를 PathPatch3D 객체로 변환합니다.
- show() 메서드를 호출하여 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
import mpl_toolkits.mplot3d.art3d as art3d
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.gca(projection='3d')
for i in ["x", "y", "z"]:
cir = Circle((0.5, 0.5), 0.2, color='red')
ax.add_patch(cir)
art3d.pathpatch_2d_to_3d(cir, z=0, zdir=i)
plt.show()코드 설명
Circle((0.5, 0.5), 0.2, color='red')는 중심 좌표 (0.5, 0.5)에 반지름 0.2인 빨간색 원을 생성합니다. 이후 ax.add_patch()로 패치를 축에 추가한 다음, art3d.pathpatch_2d_to_3d(cir, z=0, zdir=i)를 호출하여 해당 원을 z=0 위치의 지정된 평면(x, y 또는 z)으로 변환합니다.
참고 사항
최신 버전의 Matplotlib(3.4 이상)에서는 fig.gca(projection='3d')가 deprecated되었으므로, 대신 fig.add_subplot(projection='3d')를 사용하는 것이 권장됩니다.
실행 결과
위 코드를 실행하면 빨간색 원이 각각 x, y, z 평면에 하나씩 배치된 3D 그래프가 출력되며, 세 개의 원이 서로 수직인 평면 위에 놓인 모습을 확인할 수 있습니다.