Matplotlib에서 일반적인 점이나 기호 대신 PNG 또는 JPG 이미지를 플롯의 마커로 사용하면 데이터 시각화가 훨씬 직관적이고 매력적으로 변합니다. 예를 들어 지구본 아이콘으로 위치 데이터를 표시하거나 설정 아이콘으로 특정 항목을 나타낼 수 있습니다.
아래 단계를 따라 하면 이미지를 마커로 활용할 수 있습니다.
구현 단계
figure크기를 설정하고 서브플롯 주변과 사이의 여백(padding)을 조정합니다.사용할 이미지 파일의 경로를 저장하는 paths 리스트를 만듭니다.
마커를 배치할 좌표인 x, y 포인트 리스트를 준비합니다.
subplots()메서드를 사용해 figure와 서브플롯을 생성합니다.점 대신 이미지를 그리기 위해 x, y 좌표와 경로를
zip()으로 묶어 반복(iterate)합니다.이미지와 (x, y) 좌표를 이용해
AnnotationBbox()객체를 생성합니다.두 축에
xticks와yticks를 설정합니다.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 값을 조절해 적절한 마커 크기를 찾는 것이 좋습니다.