matplotlib으로 만든 지도나 이미지에 축척 막대(scale bar)를 삽입하려면 AnchoredSizeBar() 클래스를 사용해 스케일 바 객체를 생성한 뒤, 이를 현재 축에 추가하면 됩니다.
구현 단계
그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
numpy를 사용해 무작위(random) 데이터를 생성합니다.
imshow() 메서드를 사용해 데이터를 2D 래스터 이미지 형태로 화면에 표시합니다.
gca() 메서드로 현재 축(axis) 객체를 가져옵니다.
막대 아래쪽에 중앙 정렬된 레이블이 붙은 수평 방향의 축척 막대를 생성합니다.
add_artist() 메서드로 현재 축에 스케일 바 아티스트를 추가합니다.
축 눈금과 테두리를 숨기기 위해 축을 비활성화합니다.
show() 메서드를 호출해 최종 그림을 화면에 출력합니다.
예제 코드
from matplotlib import pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
data = np.random.rand(5, 5)
img = plt.imshow(data, cmap="YlGnBu")
ax = plt.gca()
scalebar = AnchoredSizeBar(ax.transData, 1, "1 Meter", 9)
ax.add_artist(scalebar)
ax.axis('off')
plt.show()
코드 설명
AnchoredSizeBar()의 주요 인자는 다음과 같습니다.
ax.transData: 데이터 좌표계를 기준으로 막대 길이를 계산하기 위한 변환(transform) 객체입니다.
1: 축척 막대가 나타낼 실제 데이터 단위의 길이입니다.
"1 Meter": 막대 아래에 표시될 레이블 문자열입니다.
9: 막대가 배치될 위치를 나타내는 코드로, 범례(loc)와 동일한 방식으로 지정합니다.
실행 결과
위 코드를 실행하면 5x5 크기의 무작위 데이터가 'YlGnBu' 컬러맵으로 표현된 지도 이미지와 함께, "1 Meter"라는 레이블이 달린 축척 막대가 화면에 나타납니다. 축을 비활성화했기 때문에 깔끔한 지도 형태의 결과물을 얻을 수 있습니다.
