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

Matplotlib에서 imshow() 그래프에 범례(Legend) 추가하는 방법

개요

Matplotlib의 imshow() 함수는 이미지나 히트맵을 표시할 때 유용하지만, 일반적인 플롯과 달리 범례(legend)를 직접 지원하지 않습니다. 이 문제를 해결하려면 각 고유 데이터 값에 해당하는 더미(dummy) 플롯 요소를 미리 만들어 두고, 이를 범례 항목으로 활용하는 우회 기법을 사용해야 합니다.

아래 단계를 따라 하면 imshow()로 그린 이미지에도 깔끔하게 범례를 추가할 수 있습니다.

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
  • numpy를 사용하여 무작위 데이터를 생성합니다.
  • 컬러맵(colormap)을 초기화합니다.
  • 샘플 데이터에서 고유한(unique) 데이터 값을 추출합니다.
  • 각 색상마다 서로 다른 라벨을 지정해 더미 라인을 플롯하여 범례 항목으로 사용합니다.
  • 범례를 오른쪽 상단 모서리에 박스 형태로 배치합니다.
  • show() 메서드를 호출하여 최종 그림을 화면에 표시합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt, cm

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

data = np.random.rand(3, 3)
cmap = cm.YlOrBr
unique_data = np.unique(data)
i = 0

for entry in unique_data:
    mycolor = cmap(entry * 255 / (max(unique_data) - min(unique_data)))
    plt.plot(0, 0, "-", color=mycolor, label="%d"%i)
    i += 1

plt.imshow(data, cmap=cmap)
plt.legend(loc="upper right", bbox_to_anchor=(1.25, 1.0))

plt.show()

실행 결과

위 코드를 실행하면 YlOrBr 컬러맵이 적용된 3×3 히트맵이 출력되고, 그림의 오른쪽 상단에 각 고유 데이터 값에 대응하는 색상 범례가 박스 형태로 함께 표시됩니다.

Matplotlib에서 imshow() 그래프에 범례(Legend) 추가하는 방법

핵심 포인트 정리

  • np.unique()를 사용하면 데이터 배열에서 중복을 제거한 고유값만 손쉽게 추출할 수 있습니다.
  • 더미 플롯은 좌표 (0, 0)에 선을 그리지만 실제 시각화에는 영향을 주지 않으므로, 범례 전용 요소로 안전하게 활용할 수 있습니다.
  • bbox_to_anchor 파라미터를 조절하면 범례를 그림 영역 안팎 어디든 자유롭게 배치할 수 있습니다.