matplotlib汇制时间索引的k线图

使用matplotlib 可以汇制行情图(为方便取数据,这里行情源还是用的tushare),不过在汇图的时候想要使用时间作为x列,格式“2017-01-01”这种格式,发现只有bar类型的图可以正常在下面显示出时间序列,其他像折线图,k线图等都不能正常显示时间序列。后来研究发现在使用时间作为X轴序列时,需要使用matplotlib.dates 方法里的date2num 函数将时间转化为数字类型才可以正常显示。而对于k线图,可以使用import matplotlib.finance as mpf 方法进行汇制。开始之前可以先认识下k线,这个是日本幕府时候被发明的,又称蜡烛图,分阳线和阴线。具体见下图:

kline

这里使用lambda实现时间转换的方法如下:

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
from dateutil import parser
import matplotlib.dates as mpl_dt
import tushare as ts
start = '2017-02-01'
end = '2017-03-01'
df = ts.get_hist_data('sh', start=start, end=end)
DATA = df[['open', 'high', 'close', 'low', 'volume']]
DATA = DATA.reset_index()
DATA["date"]  = DATA["date"].apply(lambda x : mpl_dt.date2num(parser.parse(x)))
#print(DATA)
fig, ax = plt.subplots()
mpf.candlestick_ohlc(ax, DATA.values, width=0.6, colorup='r', colordown='g')
plt.grid(True)
#设置x轴为时间
ax.xaxis_date()
ax.autoscale_view()
plt.setp(plt.gca().get_xticklabels(), rotation=30)
plt.show()

出图结果如下:

plt-kline

也可以通过一步步的转换时间,同时也可以加上title和x标签和y标签,代码如下:

%matplotlib inline
from matplotlib.pylab import date2num
import matplotlib.pyplot as plt
import matplotlib.finance as mpf
import datetime
import tushare as ts
# 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式
data_list = []
hist_data = ts.get_hist_data('600199')
for dates,row in hist_data.iterrows():
    # 将时间转换为数字
    date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
    t = date2num(date_time)
    open,high,low,close = row[:4]
    datas = (t,open,high,low,close)
    data_list.append(datas)
# 创建子图
fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
# 设置X轴刻度为日期时间
ax.xaxis_date()
plt.xticks(rotation=45)
plt.yticks()
plt.title("股票代码:601558两年K线图")
plt.xlabel("时间")
plt.ylabel("股价(元)")
mpf.candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='green')
plt.grid()




本站的发展离不开您的资助,金额随意,欢迎来赏!

You can donate through PayPal.
My paypal id: itybku@139.com
Paypal page: https://www.paypal.me/361way

  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.