Python과 Matplotlib를 사용하면 각 선의 끝부분에 해당 열 이름을 주석으로 표시할 수 있습니다. 이렇게 하면 범례를 일일이 확인하지 않아도 어떤 선이 어떤 데이터인지 한눈에 파악할 수 있어 가독성이 크게 향상됩니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백을 조정합니다.
- 데이터의 행(row) 개수를 담을 변수 rows를 초기화합니다.
- 표 형태의 Pandas 데이터프레임을 생성합니다.
- 데이터프레임의 누적 합(cumsum)을 계산합니다.
- plot() 메서드를 사용해 데이터프레임을 그래프로 그립니다.
- 선(line)과 열 이름(name)을 반복(iterate)하면서 각 선 끝에 주석을 추가합니다.
- annotate() 메서드에 열 이름, xy 좌표, 선 색상, 글자 크기 등을 지정하여 주석을 배치합니다.
- 그래프에 범례(legend)를 배치합니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
rows = 75
df = pd.DataFrame(np.random.randint(-5, 5, size=(rows, 3)),
columns=['A', 'B', 'C'])
df = df.cumsum()
ax = df.plot()
for line, name in zip(ax.lines, df.columns):
y = line.get_ydata()[-1]
ax.annotate(name, xy=(1, y), xytext=(6, 0),
color=line.get_color(), xycoords=ax.get_yaxis_transform(),
textcoords="offset points", size=14, va="center")
plt.legend(loc='lower left')
plt.show()코드 설명
핵심 부분은 annotate() 호출입니다. line.get_ydata()[-1]로 각 선의 마지막 y값을 가져오고, xycoords=ax.get_yaxis_transform()을 사용해 x축 기준으로는 축의 오른쪽 끝(x=1), y축 기준으로는 실제 데이터 좌표에 위치시킵니다. 또한 textcoords="offset points"와 xytext=(6, 0)을 통해 주석을 선 끝에서 오른쪽으로 6포인트 떨어진 곳에 배치하고, color=line.get_color()로 주석 색상을 해당 선의 색과 동일하게 맞춥니다.
실행 결과

위 코드를 실행하면 A, B, C 세 개의 누적 합 그래프가 그려지고, 각 선의 오른쪽 끝에 선 색상과 같은 색으로 열 이름이 표시되는 것을 확인할 수 있습니다.