跳到主要内容

Tushare财经数据接口(四)案例——绘制股票k线图

· 6 分钟阅读
Allen Ma

绘制股票k线图

不同种类财经数据的结构与变化特征是有差别的,适合描述不同种类数据特征的图表形式自然也会不同。线图和点图是金融分析者最常用的二维图,因为二维线图与点图比较容易展示金融数据的变化特征,并且绘制方法也较简单。本节以绘制股票k线图(也称蜡烛图)为例介绍Python语言实现时间序列数据可视化的基本方法。

在Python运行环境下利用Tushare平台数据绘制股票k线图的过程主要包含如下三个步骤:

第1步:确定数据来源。本节选择从Tushare平台获取股票行情数据,并利用Tushare包的内建接口函数获取股票行情数据,所以首先要使用命令import tushare导入Tushare包。

第2步:确定可视化的形式和实现工具。本节选择金融学图表包mpl_finance作为绘制股票价格k线图的工具,所以需要使用命令“from mpl_finance import candlestick_ochl”导入mpl_finance包中绘制k线图的子模块candlestick_ochl。 mpl_finance包是从Matplotlib中独立出来的图形包(执行“pip install mpl_finance”命令完成包的安装),通常用于绘制股票价格k线图及线图。由于Tushare包提供的pro接口函数与普通接口函数返回的数据结构存在差异,所以在调用绘图函数时需要确保数据格式的匹配。本节的程序中利用pro接口的 pro.daily()函数获取股票日线数据,并根据mpl_finance包的candlestick_ochl()函数的参数格式要求对行情数据结构进行适当的调整。此外,输出图表中绘制的k线数量不宜太多,因为k线数量太多势必导致k线之间距离太小而使得k线图不够清晰。

第3步:确定绘制图表的输出工具。本节选择图表绘制包Matplotlib作为k线图的输出工具,因为Matplotlib包提供了丰富的图表输出功能,可以比较容易地对图表的结构布局、颜色及坐标轴格式等诸多方面进行设置,使得图表更美观,也更容易理解。所以在程序中需要导入模块Matplotlib,命令为“import matplotlib”。

import tushare as ts
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
from matplotlib.pylab import date2num
#from mpl_finance import candlestick_ochl #需要另外安装mpl_finance包
from mplfinance.original_flavor import candlestick_ochl #需要另外安装mpl_finance包
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签

#具有足够权限的用户是用pro接口获取数据
pro = ts.pro_api()
code = '600004.SH'
df = pro.daily(ts_code=code, start_date='20191201')
df.shape
#stock_daily = pro.daily(ts_code=code, start_date='20181201')
#stock_daily.to_excel('stock_daily.xlsx') # 保存为电子表格

#不具有足够权限使用pro接口获取数据的用户执行下面代码,直接从xlxs文件中获取数据
df = pd.read_excel('stock_daily.xlsx', dtype={'code': 'str','trade_date': 'str'})
df.drop(df.columns[0], axis=1, inplace=True)
df.shape

df2 = df.query('trade_date >= "20171001"').reset_index() #选取2017年10月1日后的数据
df2 = df2.sort_values(by='trade_date', ascending=True) # 原始数据按照日期降序排列
df2['dates'] = np.arange(0, len(df2)) # len(df2)指记录数
fig, ax = plt.subplots(figsize=(20, 9))
fig.subplots_adjust(bottom=0.2) # 控制子图
###candlestick_ochl()函数的参数
# ax 绘图Axes的实例
# quotes 序列(时间,开盘价,收盘价,最高价,最低价) 时间是float类型,date必须转换为float
# width 图像中红绿矩形的宽度,代表天数
# colorup 收盘价格大于开盘价格时的颜色
# colordown 低于开盘价格时矩形的颜色
# alpha 矩形的颜色的透明度
candlestick_ochl(ax, quotes=df2[['dates', 'open', 'close', 'high', 'low']].values,
width=0.55, colorup='r', colordown='g', alpha=0.95)
date_tickers = df2['trade_date'].values
def format_date(x, pos):
if (x < 0) or (x > len(date_tickers)-1):
return ''
return date_tickers[int(x)]
ax.xaxis.set_major_formatter(ticker.FuncFormatter(format_date)) #按一定规则选取并在水平轴上显示时间刻度
plt.xticks(rotation=30) # 设置日期刻度旋转的角度
ax.set_ylabel('交易价格')
plt.title(code)
plt.grid(True) # 添加网格,可有可无,只是让图像好看一些
plt.xlabel('交易日期')
plt.show()


在这里插入图片描述