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

Matplotlib 3D 플롯에서 축을 숨기고 축 레이블만 유지하는 방법

Matplotlib으로 3D 그래프를 그리다 보면 배경 판(pane)과 축선, 눈금은 모두 감추고 X, Y, Z축 레이블만 남겨야 하는 경우가 있습니다. 이 글에서는 bar3d() 메서드로 3D 막대그래프를 그린 뒤, 축 요소들을 투명하게 처리하고 눈금을 제거하여 축을 숨기는 방법을 단계별로 살펴봅니다.

구현 단계

  1. figure 크기를 설정하고 서브플롯 주변 및 사이 여백을 조정합니다.
  2. 새 figure를 생성하거나 기존 figure를 활성화합니다.
  3. 서브플롯 배치의 일부로 figure에 3D Axes를 추가합니다.
  4. numpy를 사용해 x, y, z, dx, dy, dz 데이터 포인트를 생성합니다.
  5. bar3d() 메서드로 3D 막대그래프를 그립니다.
  6. 축을 숨기기 위해 축 색상과 동일한 투명한 색상 튜플을 초기화합니다.
  7. x, y, z축의 평면(pane) 색상 속성을 해당 색상 튜플로 설정합니다.
  8. x, y, z축의 선(line) 색상 속성도 동일한 색상 튜플로 설정합니다.
  9. x, y, z축에 빈 눈금(ticks)을 설정합니다.
  10. x, y, z축 레이블을 지정합니다.
  11. show() 메서드로 figure를 화면에 표시합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt

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

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

x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
y = [5, 6, 7, 8, 2, 5, 6, 3, 7, 2]
z = np.zeros(10)

dx = np.ones(10)
dy = np.ones(10)
dz = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ax.bar3d(x, y, z, dx, dy, dz, color="green")
color_tuple = (1.0, 1.0, 1.0, 0.0)

ax.w_xaxis.set_pane_color(color_tuple)
ax.w_yaxis.set_pane_color(color_tuple)
ax.w_zaxis.set_pane_color(color_tuple)
ax.w_xaxis.line.set_color(color_tuple)
ax.w_yaxis.line.set_color(color_tuple)
ax.w_zaxis.line.set_color(color_tuple)

ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])

ax.set_xlabel('X-Axis')
ax.set_ylabel('Y-Axis')
ax.set_zlabel('Z-Axis')

plt.show()

실행 결과

Matplotlib 3D 플롯에서 축을 숨기고 축 레이블만 유지하는 방법

위 코드를 실행하면 회색 배경 판과 축선, 눈금이 모두 사라지고 초록색 3D 막대그래프와 각 축의 레이블(X-Axis, Y-Axis, Z-Axis)만 깔끔하게 표시됩니다.

참고: 최신 Matplotlib 버전에서의 대체 방법

ax.w_xaxis, ax.w_yaxis, ax.w_zaxis는 최신 버전의 Matplotlib에서 사용이 권장되지 않습니다(deprecated). 최신 버전에서는 아래와 같이 ax.xaxis, ax.yaxis, ax.zaxis를 직접 사용하는 것이 좋습니다.

color_tuple = (1.0, 1.0, 1.0, 0.0)

ax.xaxis.set_pane_color(color_tuple)
ax.yaxis.set_pane_color(color_tuple)
ax.zaxis.set_pane_color(color_tuple)

ax.xaxis.line.set_color(color_tuple)
ax.yaxis.line.set_color(color_tuple)
ax.zaxis.line.set_color(color_tuple)

핵심 원리는 동일합니다. 축의 평면과 선 색상을 알파 값이 0인 완전히 투명한 색상으로 만들고, set_xticks([]) 등으로 눈금을 비우면 축 자체는 보이지 않으면서 set_xlabel(), set_ylabel(), set_zlabel()로 설정한 레이블은 그대로 유지됩니다.