Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib Poly3DCollection 플롯에 투명도 적용하는 방법

Matplotlib에서 투명한 Poly3DCollection 플롯을 그리려면 아래 단계를 따르면 됩니다.

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • projection='3d' 옵션을 사용하여 서브플롯 형태로 3D 축(Axes)을 그림에 추가합니다.
  • x, y, z 데이터 포인트를 생성합니다.
  • 정점(vertices) 목록을 만듭니다.
  • x, y, z 데이터 포인트를 튜플의 zip 리스트로 변환합니다.
  • Poly3DCollection에 사용할 다면체 목록을 구성합니다.
  • add_collection3d() 메서드를 사용해 3D 컬렉션 객체를 플롯에 추가합니다. 이때 alpha 매개변수로 투명도를 지정합니다.
  • 좌표축을 비활성화합니다.
  • show() 메서드를 호출해 그림을 화면에 표시합니다.

예제 코드

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

x = [0, 2, 1, 1]
y = [0, 0, 1, 0]
z = [0, 0, 0, 1]

vertices = [[0, 1, 2], [0, 1, 3], [0, 2, 3], [1, 2, 3]]
tupleList = list(zip(x, y, z))
poly3d = [[tupleList[vertices[ix][iy]]
    for iy in range(len(vertices[0]))]
    for ix in range(len(vertices))]

ax.scatter(x, y, z)
ax.add_collection3d(Poly3DCollection(poly3d, facecolors='w', linewidths=1, alpha=0.5))
ax.add_collection3d(Line3DCollection(poly3d, colors='k', linewidths=2, linestyles='--'))

plt.axis('off')

plt.show()

코드 설명

위 코드에서 가장 중요한 부분은 Poly3DCollection 객체를 생성할 때 alpha=0.5 옵션을 지정하는 것입니다. alpha 값은 0(완전히 투명)부터 1(완전히 불투명) 사이로 설정할 수 있으며, 값이 작아질수록 면이 더 투명하게 표현됩니다. 여기서는 facecolors='w'로 면 색상을 흰색으로, linewidths=1로 윤곽선 두께를 지정했습니다.

또한 Line3DCollection을 활용해 검은색 점선(-- 스타일)으로 정점들을 연결하면, 반투명한 면 위에서도 입체 구조를 한눈에 파악할 수 있습니다. 마지막으로 plt.axis('off')를 호출해 좌표축을 숨기면 훨씬 깔끔한 3D 시각화 결과를 얻을 수 있습니다.

실행 결과

Matplotlib Poly3DCollection 플롯에 투명도 적용하는 방법

위 코드를 실행하면 네 개의 삼각형 면으로 이루어진 반투명한 3D 다면체가 렌더링됩니다. 면이 서로 겹치는 부분이 비쳐 보이기 때문에, 복잡한 3D 구조를 직관적으로 시각화해야 할 때 이 방법이 특히 유용합니다.