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

Matplotlib imshow()로 행렬에 마스크(Mask) 적용하기

matplotlib의 imshow() 함수에서 행렬에 마스크를 적용하려면 NumPy의 np.ma.masked_where() 메서드를 활용하면 됩니다. 이 메서드는 지정한 조건식을 만족하는 요소들을 마스킹 처리하여, 시각화 결과에서 해당 영역을 제외해 줍니다.

구현 단계

  • 마스킹 기준으로 사용할 하한값(l)과 상한값(u), 두 개의 변수를 초기화합니다.
  • 5×5 크기의 무작위 난수 데이터를 생성합니다.
  • np.ma.masked_where()를 이용해 값이 l과 u 사이에 있는 요소들을 마스킹합니다.
  • nrows=1, ncols=2로 그림(figure)과 서브플롯(subplots)을 생성합니다.
  • 첫 번째 축(axs[0])에는 원본 데이터를, 두 번째 축(axs[1])에는 마스크가 적용된 데이터를 2D 래스터 이미지 형태로 표시합니다.
  • 각 축에 제목을 설정합니다.
  • show() 메서드로 최종 그림을 화면에 출력합니다.

예제 코드

import numpy as np
import matplotlib.pyplot as plt

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

l = 0.125
u = 0.575

data = np.random.rand(5, 5)
data = np.ma.masked_where((l < data) & (data < u), data)

fig, axs = plt.subplots(1, 2)

axs[0].imshow(data.data)
axs[0].set_title("Without Masked")
axs[1].imshow(data)
axs[1].set_title("With Masked")

plt.show()

코드 설명

np.ma.masked_where(condition, array)는 조건식이 참(True)인 위치의 요소들을 마스크 처리합니다. 위 예제에서는 0.125보다 크고 0.575보다 작은 값들이 마스킹 대상이 되며, 오른쪽 그래프에서 해당 셀들이 비어 있는 형태로 나타납니다. 반면 왼쪽 그래프는 .data 속성을 통해 마스크 없이 원본 배열 전체를 그대로 시각화한 결과입니다.

실행 결과

Matplotlib imshow()로 행렬에 마스크(Mask) 적용하기Matplotlib imshow()로 행렬에 마스크(Mask) 적용하기