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

Matplotlib 플롯에서 모든 범례(Legend)를 가져오는 방법

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)" 문자열이 포함되어 있어, 프로그래밍 방식으로 범례 내용을 읽거나 수정할 수 있습니다.

Matplotlib 플롯에서 모든 범례(Legend)를 가져오는 방법