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

Matplotlib에서 굵게 강조된 주석 텍스트를 추가하는 방법


Matplotlib의 산점도 위에 굵은(Bold) 주석 텍스트를 추가하려면 레이블 부분에 LaTeX 수학 표현식을 활용하는 것이 가장 효과적입니다. 아래에서 전체 구현 과정을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.

  • NumPy를 이용해 x, y 데이터 포인트를 생성합니다.

  • 각 산점도 포인트에 표시할 레이블 목록을 만듭니다.

  • scatter() 메서드로 xpoints, ypoints를 플롯하며, 색상은 xpoints 값에 기반해 지정합니다.

  • zip()으로 묶은 labels, xpoints, ypoints를 순회(iterate)합니다.

  • for 루프 내부에서 굵은 LaTeX 표현식을 적용한 annotate() 메서드를 호출합니다.

  • show() 메서드를 호출해 최종 그림을 화면에 출력합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

xpoints = np.linspace(1, 10, 10)
ypoints = np.random.rand(10)
labels = ["%.2f" % i for i in xpoints]

plt.scatter(xpoints, ypoints, c=xpoints)
for label, x, y in zip(labels, xpoints, ypoints):
    plt.annotate(
        f"$\\bf{label}$",
        xy=(x, y), xytext=(-20, 20),
        textcoords='offset points', ha='center', va='bottom',
        arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0'))
plt.show()

코드 핵심 설명

텍스트를 굵게 만드는 핵심은 $\\bf{label}$ 부분입니다. 파이썬 f-string에서 \\bf는 LaTeX 명령어인 \bf로 변환되며, Matplotlib의 내장 mathtext 엔진이 이를 해석해 굵은 글씨로 렌더링합니다. 별도의 LaTeX 설치 없이도 동작한다는 점이 큰 장점입니다.

또한 xytext=(-20, 20)textcoords='offset points' 옵션을 조합하면 주석 텍스트를 해당 데이터 포인트에서 왼쪽 위로 20포인트씩 떨어뜨려 배치할 수 있고, arrowprops 설정 덕분에 텍스트에서 데이터 포인트까지 화살표가 자동으로 연결되어 어떤 점에 대한 주석인지 한눈에 파악됩니다.

실행 결과

Matplotlib에서 굵게 강조된 주석 텍스트를 추가하는 방법