Pandas 데이터프레임의 특정 열 값을 활용하여 버블 차트나 산점도(scatter plot)의 각 데이터 포인트에 레이블을 지정하는 방법을 소개합니다. Matplotlib의 annotate() 함수를 사용하면 각 점 옆에 원하는 텍스트를 손쉽게 표시할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- 2차원 형태의, 크기가 가변적이며 서로 다른 자료형을 담을 수 있는 표 형태의 데이터로 데이터프레임 df를 생성합니다.
- df를 사용하여 산점도를 그립니다.
- annotate() 메서드로 각 데이터 포인트에 텍스트 레이블을 추가합니다.
- 그래프를 화면에 표시하려면 show() 메서드를 호출합니다.
예제 코드
import pandas as pd
from matplotlib import pyplot as plt
# 그림 크기 설정
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
# 데이터프레임 생성
df = pd.DataFrame(
dict(
x=[1, 3, 2, 4, 5],
y=[0, 3, 1, 2, 5],
points=['Kiran', 'Raju', 'Raja', 'Javed', 'Rishi']
)
)
# 산점도 그리기
ax = df.plot.scatter(x='x', y='y', alpha=0.5)
# 각 데이터 포인트에 주석(레이블) 추가
for i, txt in enumerate(df.points):
ax.annotate(txt, (df.x.iat[i]+0.05, df.y.iat[i]))
plt.show()
코드 설명
위 예제에서는 x, y 좌표와 이름(points) 세 개의 열을 가진 데이터프레임을 생성합니다. df.plot.scatter()로 산점도를 그린 후, enumerate(df.points)를 통해 각 행의 이름을 순회하면서 해당 데이터 포인트의 좌표에 약간의 x축 오프셋(+0.05)을 더해 레이블이 점과 겹치지 않도록 배치합니다.
실행 결과
위 코드를 실행하면 산점도 위에 각 데이터 포인트 옆에 'Kiran', 'Raju', 'Raja', 'Javed', 'Rishi'라는 이름이 레이블로 표시된 그래프가 출력됩니다.

