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

Matplotlib 플롯에서 Pandas DataFrame 데이터 포인트에 주석 달기

개요

데이터를 시각화할 때 각 점이 어떤 값을 의미하는지 텍스트로 표시하면 그래프의 가독성이 크게 향상됩니다. 이 글에서는 Pandas DataFrame에 저장된 데이터를 Matplotlib으로 플롯하고, 각 데이터 포인트 옆에 주석(텍스트 레이블)을 추가하는 방법을 단계별로 살펴보겠습니다.

구현 단계

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

  2. x, y, text 세 개의 열을 가진 2차원 DataFrame을 생성합니다.

  3. plot() 메서드를 사용하여 x, y 열의 데이터 포인트를 플롯합니다.

  4. pd.concat()으로 특정 축(axis)을 기준으로 Pandas 객체들을 하나로 연결합니다.

  5. iterrows()를 사용하여 DataFrame의 각 행을 반복(iterate)합니다.

  6. text() 메서드로 각 데이터 포인트 위치에 텍스트를 배치합니다.

  7. show() 메서드를 호출하여 최종 그림을 화면에 표시합니다.

예제 코드

import pandas as pd
import matplotlib.pyplot as plt

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

df = pd.DataFrame(dict(x=[2, 4, 1, 5, 2], y=[2, 1, 3, 5, 7], text=['First', 'Second', 'Third', 'Fourth', 'Fifth']))

ax = df.set_index('x')['y'].plot(style='*', color='red', ms=20)

a = pd.concat({'x': df.x, 'y': df.y, 'text': df.text}, axis=1)

for i, point in a.iterrows():
    ax.text(point['x']+0.125, point['y'], str(point['text']))

plt.show()

코드 설명

rcParams를 사용해 그림 크기를 7.50×3.50 인치로 지정하고, 자동 레이아웃 조정(autolayout)을 활성화하여 요소들이 잘리지 않도록 합니다. DataFrame은 딕셔너리 형태로 생성되며, x·y 좌표 값과 함께 각 점에 표시할 텍스트(First~Fifth)를 담고 있습니다.

플롯은 set_index('x')['y'] 방식으로 x축을 인덱스로 삼아 y값을 그리며, 마커 스타일은 별표('*'), 색상은 빨간색, 마커 크기(ms)는 20으로 설정했습니다. 이후 pd.concat()으로 x, y, text 열을 하나의 객체로 묶고, iterrows()로 각 행을 순회하면서 ax.text()를 호출해 해당 좌표 바로 옆(x + 0.125만큼 오른쪽)에 텍스트를 배치합니다.

실행 결과

위 코드를 실행하면 빨간색 별표 마커로 표시된 다섯 개의 데이터 포인트가 그려지고, 각 점 오른쪽에 'First', 'Second', 'Third', 'Fourth', 'Fifth'라는 주석이 함께 나타나 어떤 점이 어떤 데이터인지 한눈에 파악할 수 있습니다.

Matplotlib 플롯에서 Pandas DataFrame 데이터 포인트에 주석 달기