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

matplotlib에서 특정 값을 특별하게 처리하는 컬러맵(Colormap) 만드는 방법

데이터 시각화를 하다 보면 특정 값(예: 범위를 벗어난 최솟값)을 다른 색상으로 강조하고 싶은 경우가 있습니다. matplotlib에서는 set_under() 메서드를 활용하면 지정한 값보다 낮은 값들을 원하는 색으로 별도 처리할 수 있습니다.

아래 단계에 따라 하나의 값을 특별하게 처리하는 컬러맵을 만들어 보겠습니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
  • 이름이 "rainbow"인 컬러맵 인스턴스를 가져옵니다.
  • set_under('red') 메서드를 사용하여 범위 이하의 값(low out-of-range)에 적용될 색상을 빨간색으로 설정합니다.
  • numpy를 사용하여 랜덤 데이터와 eps(부동소수점 최소 간격)를 생성합니다.
  • figure와 서브플롯 집합을 생성합니다.
  • imshow() 메서드를 사용하여 데이터를 2D 래스터 이미지 형태로 표시합니다.
  • ScalarMappable 인스턴스인 im에 대한 컬러바(colorbar)를 생성합니다.
  • show() 메서드로 그림을 화면에 출력합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

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

cmap = plt.get_cmap('rainbow')
cmap.set_under('red')

data = np.random.randn(5, 5)
eps = np.spacing(0.0)

fig, ax = plt.subplots()
im = ax.imshow(data, interpolation='nearest', vmin=eps, cmap=cmap)
fig.colorbar(im, extend='min')

plt.show()

코드 설명

여기서 핵심 포인트는 두 가지입니다. 첫째, vmin=eps로 설정함으로써 0에 가까운 부동소수점 최소 간격보다 작은 값들은 모두 "범위 미만"으로 분류됩니다. 둘째, extend='min' 옵션을 컬러바에 적용하면 컬러바 하단에 삼각형 형태의 확장 영역이 추가되어, 해당 영역이 set_under()로 지정한 빨간색으로 채워지게 됩니다.

출력 결과

위 코드를 실행하면 rainbow 컬러맵으로 표현된 5×5 랜덤 데이터 히트맵이 생성되며, vmin 값보다 낮은 값은 빨간색으로 강조되고 컬러바 하단에도 빨간색 확장 마커가 함께 표시되는 것을 확인할 수 있습니다.