Python에서 초록(Green)에서 빨강(Red)으로 이어지는 색상의 히트맵을 만들고 싶다면, Matplotlib의 커스텀 컬러맵 기능을 활용하면 됩니다. 아래에서 단계별로 자세히 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
- 빨강, 초록, 파랑 채널별 색상 전환 지점을 담은 딕셔너리(cdict)를 정의합니다.
- LinearSegmentedColormap을 사용해 선형 구간 매핑 방식의 사용자 정의 컬러맵을 생성합니다.
- figure와 서브플롯(ax)을 함께 생성합니다.
- 5×5 크기의 난수 데이터를 만듭니다.
- pcolormesh()로 비정형 사각 격자 위에 유사컬러(pseudocolor) 플롯을 그립니다.
- ScalarMappable 인스턴스에 대한 컬러바(colorbar)를 추가합니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
cdict = {'red': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 1.0, 0.7)),
'green': ((0.0, 0.7, 0.7),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.0, 0.0))
}
GnRd = colors.LinearSegmentedColormap('GnRd', cdict)
fig, ax = plt.subplots(1)
data = np.random.rand(5, 5)*6.-3.
p = ax.pcolormesh(data, cmap=GnRd, vmin=-5, vmax=5)
fig.colorbar(p, ax=ax)
plt.show()코드 설명
핵심은 cdict 딕셔너리입니다. 각 RGB 채널마다 (위치, 시작값, 끝값) 형태의 튜플 목록을 정의하여, 값이 최소(vmin)에서 최대(vmax)로 이동할 때 색이 어떻게 보간되는지 제어합니다. 이 예제에서는 값이 낮을 때 초록색 계열로, 높아질수록 빨간색 계열로 자연스럽게 전환되도록 설정했습니다.
이렇게 만든 컬러맵 GnRd를 pcolormesh()의 cmap 인자로 전달하면, 데이터 값에 따라 초록~빨강 범위의 히트맵이 완성됩니다. 마지막으로 colorbar()를 추가하면 각 색상이 나타내는 수치 범위를 한눈에 확인할 수 있습니다.
실행 결과
