Matplotlib에서 플롯에 포함된 모든 범례를 가져오려면 get_children() 메서드를 활용할 수 있습니다. 이 메서드는 축(axis)이 가진 모든 자식 요소(아티스트)를 반환하며, 반환된 요소들을 하나씩 순회하면서 해당 요소가 Legend 클래스의 인스턴스인지 확인한 뒤, 범례가 포함한 텍스트를 추출하는 방식입니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변 여백을 조정합니다.
- NumPy를 사용하여 x 데이터 포인트를 생성합니다.
- figure와 서브플롯 집합을 생성합니다.
- plot() 메서드로 서로 다른 레이블과 색상을 지정해 sin(x)와 cos(x) 곡선을 그립니다.
- 축의 자식 요소들을 가져온 후, 그중 Legend 인스턴스를 찾아 범례 텍스트를 추출합니다.
- show() 메서드로 완성된 그림을 화면에 표시합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = np.linspace(-10, 10, 100)
fig, ax = plt.subplots()
ax.plot(np.sin(x), color='red', lw=7, label="y=sin(x)")
ax.plot(np.cos(x), color='orange', lw=7, label="y=cos(x)")
plt.legend(loc='upper right')
for item in ax.get_children():
if isinstance(item, matplotlib.legend.Legend):
print(item.texts)
plt.show()
코드 설명
ax.get_children()은 축에 속한 선(line), 눈금(tick), 축 라벨, 범례 등 모든 아티스트 객체를 리스트 형태로 반환합니다. 이 목록을 반복문으로 순회하면서 isinstance(item, matplotlib.legend.Legend) 조건으로 범례 객체만 걸러낼 수 있으며, 범례 객체의 .texts 속성에는 각 항목의 레이블 문자열이 Text 아티스트로 저장되어 있습니다.
실행 결과
위 코드를 실행하면 콘솔에 범례가 담고 있는 Text 객체 목록이 출력됩니다. 각 Text 객체에는 plot() 메서드의 label 인자로 지정한 "y=sin(x)", "y=cos(x)" 문자열이 포함되어 있어, 프로그래밍 방식으로 범례 내용을 읽거나 수정할 수 있습니다.
