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

Matplotlib의 imshow에서 두 개의 서로 다른 컬러맵을 함께 표시하는 방법

Matplotlib에서 imshow를 사용할 때 하나의 축(ax) 위에 양수 데이터와 음수 데이터를 각각 다른 컬러맵으로 표현해야 하는 경우가 있습니다. 이 글에서는 마스크 배열(masked array)을 활용해 두 개의 서로 다른 컬러맵과 컬러바를 동시에 표시하는 방법을 단계별로 소개합니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • -10부터 10 사이의 난수로 5×5 크기의 2차원 행렬을 생성합니다.
  • 양수와 음수 값을 기준으로 마스크된 배열 data1data2를 만듭니다.
  • figure와 서브플롯을 생성합니다.
  • data1data2를 2D 래스터 형태의 이미지로 표시하되, 각각 다른 cmap을 지정합니다.
  • 두 개의 서로 다른 컬러바를 추가하기 위해 colorbar() 메서드를 사용합니다.
  • 각 이미지에 대응하는 컬러바를 설정합니다.
  • 컬러바에 레이블(label)을 지정합니다.
  • show() 메서드로 최종 결과를 화면에 출력합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

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

img = np.random.randint(-10, 10, (5, 5))

data1 = np.ma.masked_array(img, img >= 0)
data2 = np.ma.masked_array(img, img < 0)

fig, ax = plt.subplots()

img1 = ax.imshow(data1, cmap="prism_r")
img2 = ax.imshow(data2, cmap="copper")

bar1 = plt.colorbar(img1)
bar2 = plt.colorbar(img2)

bar1.set_label('ColorBar 1')
bar2.set_label('ColorBar 2')

plt.show()

코드 설명

np.ma.masked_array는 특정 조건에 해당하는 요소를 마스크(숨김) 처리하는 기능을 제공합니다. 위 예제에서는 img >= 0인 요소를 마스크한 data1(음수 값만 표시)과 img < 0인 요소를 마스크한 data2(양수 값만 표시)를 생성하여, 동일한 좌표축 위에 서로 다른 컬러맵(prism_r, copper)으로 겹쳐 그립니다.

컬러바는 각 이미지 객체(img1, img2)를 plt.colorbar()에 전달함으로써 개별적으로 생성할 수 있으며, set_label() 메서드를 사용해 각 컬러바에 이름을 붙일 수 있습니다.

실행 결과

Matplotlib의 imshow에서 두 개의 서로 다른 컬러맵을 함께 표시하는 방법

위 코드를 실행하면 음수 영역과 양수 영역이 각각 다른 색상 팔레트로 표현되며, 그림 옆에는 두 개의 독립적인 컬러바가 함께 나타나는 것을 확인할 수 있습니다.