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

Matplotlib에서 주석이 달린 원 표시하기 – 단계별 가이드

Matplotlib에서 특정 데이터 포인트에 원형 강조 표시를 하고, 화살표가 달린 주석(annotation)까지 함께 추가하고 싶다면 몇 가지 단계만 거치면 됩니다. 이 글에서는 plot()annotate() 메서드를 활용해 원으로 감싼 마커와 주석을 시각화하는 방법을 소개합니다.

구현 단계

  • 그림(figure) 크기를 설정하고, 서브플롯 사이 및 주변 여백(padding)을 조정합니다.
  • NumPy를 사용하여 데이터 포인트를 생성합니다.
  • 원과 주석을 배치할 대상 좌표(point)를 지정합니다.
  • plt.gca()로 현재 축(current axis)을 가져옵니다.
  • plot() 메서드를 사용해 전체 데이터와 데이터 포인트를 그립니다.
  • X축과 Y축의 표시 범위를 설정합니다.
  • 원형 마커를 만들려면 marker='o' 옵션과 마커 관련 속성들을 지정하여 plot() 메서드를 호출합니다.
  • 7번 단계에서 만든 원을 향해 화살표 스타일의 주석을 추가합니다.
  • 마지막으로 show() 메서드로 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

data = np.array([[5, 3, 4, 4, 6],
    [1, 5, 3, 2, 2]])
point = data[:, 2]
ax = plt.gca()
ax.plot(data[0], data[1], 'o', ms=10, color='red')

ax.set_xlim([2, 8])
ax.set_ylim([0, 6])
radius = 15

ax.plot(point[0], point[1], 'o',
    ms=radius * 2, mec='yellow', mfc='none', mew=2)

ax.annotate('Circled Marker', xy=point, xytext=(60, 60),
    textcoords='offset points',
    color='green', size='large',
    arrowprops=dict(
        arrowstyle='simple,tail_width=0.3,head_width=0.8,head_length=0.8',
        facecolor='b', shrinkB=radius * 1.2)
    )

plt.show()

코드 설명

data 배열에는 x 좌표와 y 좌표가 각각 담겨 있으며, point = data[:, 2]를 통해 세 번째 열의 데이터 포인트 하나를 선택합니다. 첫 번째 plot() 호출은 모든 데이터를 빨간색 점(ms=10)으로 그리고, 두 번째 plot() 호출은 선택된 포인트 위에 노란색 테두리(mec='yellow')와 채우기 없는(mfc='none') 커다란 원을 겹쳐 강조 효과를 냅니다.

annotate() 메서드는 'Circled Marker'라는 텍스트를 포인트에서 60포인트 떨어진 위치(xytext=(60, 60), textcoords='offset points')에 배치하고, arrowprops를 통해 파란색 화살표가 원을 가리키도록 설정합니다. shrinkB 값은 화살표 끝이 원과 겹치지 않도록 여유 공간을 확보하는 역할을 합니다.

실행 결과

위 코드를 실행하면 빨간색 데이터 포인트 중 하나가 노란색 원으로 강조되고, 초록색 'Circled Marker' 텍스트에서 파란색 화살표가 해당 원을 가리키는 그래프가 출력됩니다.

Matplotlib에서 주석이 달린 원 표시하기 – 단계별 가이드Matplotlib에서 주석이 달린 원 표시하기 – 단계별 가이드