[FAQ] matplotlib 지정 위치에 수직 수평선을 그리려면

[FAQ] matplotlib: 지정 위치에 수직/수평선을 그리려면?

  • Q: 설명을 위해 특정 위치에 수직선 혹은 수평선을 그리고 싶습니다.
  • A: axhline(), axvline() 함수를 사용하시면 됩니다.

시계열 차트는 대부분 x축이 시간, y축이 값(가격 혹은 수치 값)으로 이루어지는 경우가 많다. 차트의 내용을 설명을 위해 특정 x축에 시점을 지정하여 표시하거나, y축의 특정 가격에 기준선을 표시하는 것이 필요한 경우가 있다. 이때, axhline(), axvline() 함수를 사용하면 간단하게 표시할 수 있다.

In [1]:
%matplotlib inline
import matplotlib.pylab as plt

plt.rcParams["figure.figsize"] = (14,4)
plt.rcParams['axes.grid'] = True 

2016년 1년간 KOSPI 지수

In [2]:
import pandas as pd
from datetime import datetime
from pandas_datareader import data

start = datetime(2016, 1, 1)
end = datetime(2016, 12, 31)
df = data.get_data_yahoo('^KS11', start, end)

plt.plot(df['Adj Close'])
plt.show()

axhline() - 가로선

plt.axhline()로 가로선을 그린다. y값으로 2000 포인트를 설명선으로 잡았다. 색상(color)와 선의 두께(linewidth)를 지정할 수 있다.

In [3]:
plt.plot(df['Adj Close'])
plt.axhline(y=2000, color='r', linewidth=1)
plt.show()

axvline() - 세로선

plt.axvline()로 세로선을 그릴 수 있다. 시계열 차트에서 x값은 시간으로 표시하므로 x값으로 시간을 지정하게 된다.

y값으로 2000 포인트를 설명선으로 잡았다. 색상(color)와 선의 두께(linewidth)를 지정할 수 있으며, 다양한 라인스타일(linestyle)을 지정할 수 있다.

In [4]:
plt.plot(df['Adj Close'])
plt.axvline(x=datetime(2016, 2, 17), color='r', linestyle='--', linewidth=3)
plt.axvline(x=datetime(2016, 6, 28), color='r', linestyle=':', linewidth=10)
plt.show()

라인스타일(linestyle)

여기서는 파쇄선(dashed line)과 점선(dotted line)을 지정해 보았다. 자주 사용되는 라인스타일은 다음과 같다.

설명
'-' 혹은 'solid' 실선(solid line)
'--' 혹은 'dashed' 파선(dashed line)
'-.' 혹은 'dashdot' 1점 쇄선 (dash-dotted line)
':' 혹은 'dotted' 점선(dotted line)
'' 혹은 ' ' 그리지 않는다

댓글