2022-06-27 22:57:26

안녕하세요. 수많은 소음 속에서 신호를 찾아가는 비스카이비전입니다. 

 

오늘은 matplotlib로 그린 그래프에 화살표 및 텍스트를 삽입하는 방법에 대해 공유하고자 합니다. 예전에 제 블로그 구글 애드센스 월 수익 추이를 matplotlib를 활용하여 그렸던 것이 있는데, 그 그래프에 화살표와 텍스트를 삽입해 보겠습니다. 우선 화살표와 텍스트 삽입 전 그래프입니다.

 

import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib import font_manager, rc 
font_path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)

profit = [8.63, 10.66, 4.82, 3.91, 1.77, 5.09, 3.06, 6.17, 5.28, 1.92, 1.72, 
        2.99, 2.65, 7.25, 12.55, 2.77, 4.25, 2.39, 8.78, 12.39, 9.96, 7.21,
        8.09, 20.9, 29.42, 36.67, 45.53, 24.08, 24.55, 26.4, 40.72, 42.77,
        45.36, 39.46, 33.73, 56.34]

df_profit = pd.DataFrame(profit)
print(df_profit)

plt.plot(profit)
plt.xlabel('월')
plt.ylabel('애드센스 수익($)')
plt.grid(True)
plt.show()

 

 

 

matplotlib 그래프에 화살표 넣기

월 수익이 전체적으로 증가하고 있다는 추세를 나타내기 위한 화살표를 넣어보겠습니다. 그래프 상에서 (0, 0)부터 (35, 55)까지 lw(line width)가 3인 화살표를 그려보도록 하겠습니다. annotate 함수를 사용한 아래 코드만 추가되면 됩니다. xytext가 화살표의 시작점이라고 보시면 되고, xy가 화살표의 끝점이라고 보시면 됩니다. 

 

plt.annotate('', xytext=(0, 0), xy=(35, 55), xycoords='data', 
        arrowprops=dict(arrowstyle='->', color='red', lw=3))

 

 

matplotlib 그래프에 텍스트 넣기

이번에는 텍스트도 추가해보겠습니다. "디지털 노마드를 향하여 가자!"라는 문구를 넣어보겠습니다. 

 

plt.annotate('디지털 노마드를 향하여 가자!', xy=(15, 15), rotation=36, ha='center', va='baseline', fontsize=15)

 

좌표 (15, 15)를 텍스트를 넣는 기준점으로 하고, 글자를 36도 만큼 회전시키고, ha (horizontal alignment) 옵션으로 수평 가운데 정렬, va (vertical alignment) 옵션으로 수직 기본라인 정렬, 글자 크기 15로 설정하겠다는 의미의 코드입니다.

 

 

보통 이렇게 화살표나 텍스트는 matplotlib로 생성한 그래프에 파워포인트(PPT)를 활용해서 추가한다고 생각하시는 분들도 계십니다. 물론 그렇게 하시는 분들도 계시겠지만, 코딩으로도 됩니다. 

 

전체 코드 공유

전체 코드는 다음과 같습니다.

 

import pandas as pd 
import matplotlib.pyplot as plt 
from matplotlib import font_manager, rc 
font_path = "c:/Windows/Fonts/malgun.ttf"
font_name = font_manager.FontProperties(fname=font_path).get_name()
rc('font', family=font_name)

profit = [8.63, 10.66, 4.82, 3.91, 1.77, 5.09, 3.06, 6.17, 5.28, 1.92, 1.72, 
        2.99, 2.65, 7.25, 12.55, 2.77, 4.25, 2.39, 8.78, 12.39, 9.96, 7.21,
        8.09, 20.9, 29.42, 36.67, 45.53, 24.08, 24.55, 26.4, 40.72, 42.77,
        45.36, 39.46, 33.73, 56.34]

df_profit = pd.DataFrame(profit)
print(df_profit)

plt.plot(profit)
plt.xlabel('월')
plt.ylabel('애드센스 수익($)')
plt.grid(True)
 
plt.annotate('', xytext=(0, 0), xy=(35, 55), xycoords='data', 
        arrowprops=dict(arrowstyle='->', color='red', lw=3))
plt.annotate('디지털 노마드를 향하여 가자!', xy=(15, 15), rotation=36, ha='center', va='baseline', fontsize=15)
plt.show()

 

관련 글

[python] matplotlib로 플롯 그릴 때 한글 깨짐 문제 해결 방법

처음으로 애드센스 월수입 50달러를 넘었습니다.