Matplotlib에서 범례(legend)의 글꼴 이름(fontname)을 변경하고 싶다면, legend.get_texts()로 범례 텍스트 객체에 접근한 뒤 각 항목의 속성을 수정하는 방식으로 간단하게 처리할 수 있습니다. 아래에서 단계별로 살펴보겠습니다.
범례 글꼴 변경 단계
figure.figsize를 설정해 그림 크기를 지정하고,figure.autolayout으로 서브플롯 주변 여백(padding)을 자동 조정합니다.NumPy를 사용해 x 데이터 포인트를 생성합니다.
plot()메서드로 x, sin(x), cos(x) 그래프를 그립니다.legend()메서드를 호출해 범례를 원하는 위치에 배치합니다.legend.get_texts()를 순회하면서 각 텍스트 객체의 글꼴 이름을set_fontname()으로 업데이트합니다.show()메서드를 사용해 최종 그림을 화면에 표시합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-5, 5, 100)
plt.plot(x, np.sin(x), label="$y=sin(x)$")
plt.plot(x, np.cos(x), label="$y=cos(x)$")
legend = plt.legend(loc='upper right')
i = 1
for t in legend.get_texts():
# 범례 텍스트 변경
t.set_text("name %d" % i)
# 범례 글꼴 이름 변경
t.set_fontname("Times New Roman")
i += 1
plt.show()
코드 설명
위 예제에서는 먼저 NumPy의 linspace로 -5부터 5까지 100개의 균일한 x 값을 생성한 뒤, 사인 곡선과 코사인 곡선을 하나의 그래프에 함께 그렸습니다. 이후 plt.legend(loc='upper right')로 범례를 오른쪽 상단에 배치했습니다.
핵심 부분은 for t in legend.get_texts(): 루프입니다. get_texts()는 범례에 포함된 텍스트 객체(Text) 목록을 반환하며, 각 객체에 대해 다음 작업을 수행할 수 있습니다.
t.set_text(): 범례 항목의 표시 문자열을 변경합니다. 위 예제에서는 "name 1", "name 2"로 바꿉니다.t.set_fontname(): 해당 범례 항목의 글꼴 이름을 지정합니다. "Times New Roman", "Arial", "Courier New" 등 시스템에 설치된 폰트를 사용할 수 있습니다.
만약 범례 전체의 글꼴을 한 번에 지정하고 싶다면, 범례 생성 시 prop 인자를 활용하는 방법도 있습니다.
legend = plt.legend(loc='upper right', prop={'family': 'Times New Roman'})
이 방식은 개별 항목을 순회하지 않고도 모든 범례 텍스트의 글꼴을 일괄 적용할 수 있어 더욱 간편합니다.
실행 결과
코드를 실행하면 사인과 코사인 곡선이 그려진 그래프의 오른쪽 상단에 범례가 표시되며, 범례 항목의 텍스트는 "name 1", "name 2"로 변경되고 지정한 글꼴(Times New Roman)로 렌더링됩니다.