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