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

Matplotlib에서 숫자를 색상 스케일로 변환하는 방법

Matplotlib에서 숫자 데이터를 색상 스케일로 변환하려면 컬러맵(cmap)과 정규화(Normalize)를 함께 활용하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.

구현 단계

  • NumPy를 사용해 x, y, c 데이터 포인트를 생성합니다.
  • 생성한 데이터를 Pandas 데이터프레임으로 변환합니다.
  • subplots() 메서드로 새 figure를 만들거나 기존 figure를 활성화합니다.
  • 'hot' 컬러맵을 가져옵니다.
  • 데이터를 선형적으로 정규화하기 위해 Normalize() 클래스를 사용합니다.
  • x, y 데이터 포인트와 정규화된 컬러맵을 적용해 산점도(scatter)를 그립니다.
  • x 데이터에 맞게 xticks를 설정합니다.
  • 컬러바(colorbar)를 만들기 위해 ScalarMappable 객체를 생성합니다.
  • colorbar() 메서드로 컬러바를 표시합니다.
  • show() 메서드로 최종 그래프를 화면에 출력합니다.

예제 코드

from matplotlib import pyplot as plt, colors
import numpy as np
import pandas as pd
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.arange(12)
y = np.random.rand(len(x)) * 20
c = np.random.rand(len(x)) * 3 + 1.5
df = pd.DataFrame({"x": x, "y": y, "c": c})
fig, ax = plt.subplots()
cmap = plt.cm.hot
norm = colors.Normalize(vmin=2.0, vmax=5.0)
ax.scatter(df.x, df.y, color=cmap(norm(df.c.values)))
ax.set_xticks(df.x)
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
fig.colorbar(sm)
plt.show()

실행 결과

위 코드를 실행하면 c 값의 크기에 따라 각 점이 'hot' 컬러맵의 색으로 표현된 산점도가 출력되며, 그래프 오른쪽에는 값의 범위(2.0~5.0)를 나타내는 컬러바가 함께 표시됩니다.

핵심은 colors.Normalize(vmin, vmax)로 데이터 범위를 0~1 사이 값으로 변환한 뒤, 이 값을 cmap()에 전달하여 실제 색상(RGBA)으로 매핑하는 것입니다. 이 방식을 사용하면 산점도뿐 아니라 막대그래프, 히트맵 등 다양한 시각화에서 숫자를 직관적인 색상으로 표현할 수 있습니다.