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

Matplotlib 히트맵에서 상단/하단 삼각형만 표시하는 방법

Matplotlib에서 히트맵(heatmap)의 상단 또는 하단 삼각형 부분만 표시하고 싶다면, NumPy를 이용해 마스크(mask)가 적용된 2차원 배열을 만든 뒤 이를 이미지 형태로 변환하여 히트맵을 생성할 수 있습니다. 상관관계 행렬처럼 대칭 구조를 가진 데이터를 시각화할 때 불필요한 중복을 제거해 가독성을 크게 높일 수 있는 유용한 기법입니다.

구현 단계

  • 그림 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.

  • 5×5 크기의 무작위(random) 데이터를 생성합니다.

  • numpy.tri() 메서드를 사용하여 지정한 대각선 아래쪽(및 대각선 자체)에는 1, 나머지 위치에는 0이 채워진 배열을 만듭니다.

  • 3번 단계에서 만든 배열을 마스크로 사용하여 마스크 처리된 2차원 배열을 얻습니다.

  • imshow() 메서드를 사용해 데이터를 이미지, 즉 2차원 정규 래스터(raster) 형태로 화면에 표시합니다.

  • 그림을 출력하기 위해 show() 메서드를 호출합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rand(5, 5)
mask = np.tri(data.shape[0], k=-1)
data = np.ma.array(data, mask=mask)
plt.imshow(data, interpolation="nearest", cmap='copper')
plt.show()

실행 결과

위 코드를 실행하면 대각선 아래쪽 영역은 마스크되어 흰색으로 비어 있고, 대각선 위쪽 삼각형 영역의 값만 'copper' 컬러맵으로 표현된 히트맵이 출력됩니다.

Matplotlib 히트맵에서 상단/하단 삼각형만 표시하는 방법

참고: 하단 삼각형만 표시하기

반대로 하단 삼각형만 남기고 싶다면 마스크 배열을 반전시키면 됩니다. mask = np.tri(data.shape[0], k=-1) 대신 mask = np.triu(np.ones(data.shape), k=1)을 사용하거나, 기존 마스크에 np.logical_not()을 적용하면 원하는 방향으로 표시 영역을 손쉽게 변경할 수 있습니다.