Python에서 색조(hue) 컬러맵과 범례를 함께 사용해 3D 산점도를 그리려면 아래 단계를 따르면 됩니다.
- 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- NumPy를 사용해 x, y, z 데이터 포인트를 생성합니다.
- figure() 메서드로 새 그림을 생성하거나 기존 그림을 활성화합니다.
- 필요한 경우 현재 축(axes)을 가져옵니다.
- 팔레트를 정의해 색조 컬러맵을 준비합니다.
- scatter() 메서드로 x, y, z 데이터 포인트를 플롯합니다.
- 플롯에 범례를 배치합니다.
- show() 메서드로 그림을 화면에 표시합니다.
핵심 개념 정리
이 예제에서는 seaborn의 husl 팔레트로 256가지 색상을 생성한 뒤, 이를 ListedColormap으로 변환하여 산점도의 색상 맵으로 사용합니다. 데이터 포인트의 색은 c=x 옵션을 통해 x값에 따라 결정되며, legend_elements() 메서드를 활용하면 컬러맵에 대응하는 범례를 손쉽게 만들 수 있습니다.
예제 코드
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt
from matplotlib.colors import ListedColormap
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
cmap = ListedColormap(sns.color_palette("husl", 256).as_hex())
sc = ax.scatter(x, y, z, s=40, c=x, marker='o', cmap=cmap, alpha=1)
plt.legend(*sc.legend_elements(), bbox_to_anchor=(1.05, 1), loc=2)
plt.show()참고: 최신 버전의 Matplotlib에서는 fig.gca(projection='3d') 방식이 권장되지 않으므로, 위 코드처럼 fig.add_subplot(projection='3d')를 사용하는 것이 좋습니다.
실행 결과

위 코드를 실행하면 x값에 따라 husl 팔레트의 색상이 입혀진 3D 산점도가 그려지고, 그림 오른쪽에 각 색상 구간을 나타내는 범례가 함께 표시됩니다. alpha 값을 조절하면 점의 투명도를, s 값으로 점의 크기를 자유롭게 변경할 수 있습니다.