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

Matplotlib 플롯에서 PNG/JPG 이미지를 커스텀 마커로 사용하는 방법

Matplotlib에서 일반적인 점이나 기호 대신 PNG 또는 JPG 이미지를 플롯의 마커로 사용하면 데이터 시각화가 훨씬 직관적이고 매력적으로 변합니다. 예를 들어 지구본 아이콘으로 위치 데이터를 표시하거나 설정 아이콘으로 특정 항목을 나타낼 수 있습니다.

아래 단계를 따라 하면 이미지를 마커로 활용할 수 있습니다.

구현 단계

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

  • 사용할 이미지 파일의 경로를 저장하는 paths 리스트를 만듭니다.

  • 마커를 배치할 좌표인 x, y 포인트 리스트를 준비합니다.

  • subplots() 메서드를 사용해 figure와 서브플롯을 생성합니다.

  • 점 대신 이미지를 그리기 위해 x, y 좌표와 경로를 zip()으로 묶어 반복(iterate)합니다.

  • 이미지와 (x, y) 좌표를 이용해 AnnotationBbox() 객체를 생성합니다.

  • 두 축에 xticksyticks를 설정합니다.

  • show() 메서드로 최종 figure를 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
from matplotlib.offsetbox import OffsetImage, AnnotationBbox

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

def getImage(path):
    return OffsetImage(plt.imread(path, format="jpg"), zoom=.1)

paths = ['globe.jpg', 'settings.jpg', 'settings.jpg', 'globe.jpg']
x = [8, 4, 3, 6]
y = [5, 3, 4, 7]
fig, ax = plt.subplots()
for x0, y0, path in zip(x, y, paths):
    ab = AnnotationBbox(getImage(path), (x0, y0), frameon=False)
    ax.add_artist(ab)
plt.xticks(range(10))
plt.yticks(range(10))
plt.show()

핵심 요소 설명

  • OffsetImage: 이미지 파일을 읽어 플롯에 배치할 수 있는 오프셋 객체로 변환합니다. zoom 파라미터로 이미지 크기를 조절할 수 있으며, 위 예제에서는 원본의 10% 크기로 축소했습니다.

  • AnnotationBbox: OffsetImage를 특정 (x, y) 좌표에 고정하는 역할을 합니다. frameon=False 옵션을 사용하면 이미지 주변의 테두리 상자가 제거되어 더 깔끔하게 표시됩니다.

  • add_artist(): AnnotationBbox는 일반적인 plot 요소가 아니므로 ax.plot() 대신 add_artist() 메서드로 축에 추가해야 합니다.

출력 결과

위 코드를 실행하면 각 좌표 위치에 지정한 이미지(globe.jpg, settings.jpg)가 마커처럼 표시된 산점도 형태의 그래프를 확인할 수 있습니다.

이 기법은 지도 시각화, 제품 카탈로그 차트, 게임 데이터 표현 등 다양한 분야에서 활용도가 높습니다. 이미지 해상도가 높다면 zoom 값을 조절해 적절한 마커 크기를 찾는 것이 좋습니다.