matplotlib汇制时间索引的k线图
使用matplotlib 可以汇制行情图(为方便取数据,这里行情源还是用的tushare),不过在汇图的时候想要使用时间作为x列,格式“2017-01-01”这种格式,发现只有bar类型的图可以正常在下面显示出时间序列,其他像折线图,k线图等都不能正常显示时间序列。后来研究发现在使用时间作为X轴序列时,需要使用matplotlib.dates 方法里的date2num 函数将时间转化为数字类型才可以正常显示。而对于k线图,可以使用import matplotlib.finance as mpf 方法进行汇制。开始之前可以先认识下k线,这个是日本幕府时候被发明的,又称蜡烛图,分阳线和阴线。具体见下图:
这里使用lambda实现时间转换的方法如下:
1%matplotlib inline
2import matplotlib.pyplot as plt
3import matplotlib.finance as mpf
4from dateutil import parser
5import matplotlib.dates as mpl_dt
6import tushare as ts
7start = '2017-02-01'
8end = '2017-03-01'
9df = ts.get_hist_data('sh', start=start, end=end)
10DATA = df[['open', 'high', 'close', 'low', 'volume']]
11DATA = DATA.reset_index()
12DATA["date"] = DATA["date"].apply(lambda x : mpl_dt.date2num(parser.parse(x)))
13#print(DATA)
14fig, ax = plt.subplots()
15mpf.candlestick_ohlc(ax, DATA.values, width=0.6, colorup='r', colordown='g')
16plt.grid(True)
17#设置x轴为时间
18ax.xaxis_date()
19ax.autoscale_view()
20plt.setp(plt.gca().get_xticklabels(), rotation=30)
21plt.show()
出图结果如下:
也可以通过一步步的转换时间,同时也可以加上title和x标签和y标签,代码如下:
1%matplotlib inline
2from matplotlib.pylab import date2num
3import matplotlib.pyplot as plt
4import matplotlib.finance as mpf
5import datetime
6import tushare as ts
7# 对tushare获取到的数据转换成candlestick_ohlc()方法可读取的格式
8data_list = []
9hist_data = ts.get_hist_data('600199')
10for dates,row in hist_data.iterrows():
11 # 将时间转换为数字
12 date_time = datetime.datetime.strptime(dates,'%Y-%m-%d')
13 t = date2num(date_time)
14 open,high,low,close = row[:4]
15 datas = (t,open,high,low,close)
16 data_list.append(datas)
17# 创建子图
18fig, ax = plt.subplots()
19fig.subplots_adjust(bottom=0.2)
20# 设置X轴刻度为日期时间
21ax.xaxis_date()
22plt.xticks(rotation=45)
23plt.yticks()
24plt.title("股票代码:601558两年K线图")
25plt.xlabel("时间")
26plt.ylabel("股价(元)")
27mpf.candlestick_ohlc(ax,data_list,width=1.5,colorup='r',colordown='green')
28plt.grid()
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/matplotlib-kline/6170.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.