重点研究matplotlib在量化投资中的应用
pip install matplotlib
Matplotlib的基础知识如下:
在同一个图中绘制cos和sin曲线,并且美化图形。
import numpy as np
import matplotlib.pyplot as plt
# 设置x取值范围
x = np.linspace(-np.pi,np.pi,256)
C,S = np.cos(x),np.sin(x)
# 绘图
plt.plot(x,C)
plt.plot(x,S)
让我们给它添加一个标题,更改线条样式,设置x,y轴上下限,设置曲线标记。
# 创建一个9x7的点阵图,设置分辨率为80个像素
plt.figure(figsize=(9,7),dpi=80)
# 创建一个新的1*1的子图,接下来的图形会绘制在其中第一块
plt.subplot(1,1,1)
# 绘制余弦曲线,使用蓝色的,连续的,宽度为1像素的线条
plt.plot(x,C,color="blue",linewidth=1.0,linestyle='-')
# 绘制正弦曲线,使用绿色的,连续的,宽度为1像素的线条
plt.plot(x,S,color="green",linewidth=1.0,linestyle='-')
# 设置横轴上下限
plt.xlim(-3.0,3.0)
# 设置纵轴上下限
plt.ylim(-1.0,1.0)
# 设置横轴记号
plt.xticks(np.linspace(-3,3,5,endpoint=True))
# 设置纵轴记号
plt.yticks(np.linspace(-1,1,4,endpoint=True))
# 设置标题
plt.title("demo")
# 以分辨率72像素来保存图片
plt.savefig("demo.jpg",dpi=72)
如果要绘制多个图表,可以给figure()传递一个整数参数来指定figure对象的序号,如果序号所指定的对象已经存在,只需要让它成为当前的figure对象即可。
代码如下:
import numpy as np
import matplotlib.pyplot as plt
# 创建图表1和图表2
plt.figure(1)
plt.figure(2)
# 在图表2中创建子图1和子图2
ax1 = plt.subplot(2,1,1)
ax2 = plt.subplot(2,1,2)
x = np.linspace(1,3,100)
for i in range(5):
# 选择图表1
plt.figure(1)
plt.plot(x,np.exp(i*x/3))
# 选择图表2的子图1
plt.sca(ax1)
plt.plot(x,np.sin(i*x))
# 选择图表2的子图2
plt.sca(ax2)
plt.plot(x,np.cos(i*x))
Matplotlib的图像都位于一个figure画布中,可以使用plt.figure创建一个新画布
fig = plt.figure(figsize=(8,6),dpi=80)
ax = {}
for i in [1,2,3]:
ax[i] = fig.add_subplot(2,2,i)
from numpy.random import randn
ax[1].hist(randn(100),bins=25,color='k',alpha=0.4);
ax[2].scatter(np.arange(50),np.arange(50)+3*randn(50))
ax[3].plot(randn(50).cumsum(),'k--')
x = np.arange(-10,10,0.1)
plt.figure(figsize=(12,6))
# 1行3列的第一个子图
axes = plt.subplot(1,3,1)
axes.plot(x,np.sin(x))
# 设置网格颜色宽度样式
axes.grid(color='r',linewidth=1,linestyle='--')
# 1行3列的第二个子图
axes = plt.subplot(1,3,2)
axes.plot(x,np.cos(x))
# 设置网格颜色宽度样式
axes.grid(color='k',linewidth=1,linestyle='-.')
# 1行3列的第三个子图
axes = plt.subplot(1,3,3)
axes.plot(x,np.exp(x))
# 设置网格颜色宽度样式
axes.grid(color='g',linewidth=1,linestyle=':')
pip install tushare
mpl_finance是python中用来绘制蜡烛图、线图的分析工具,目前已经从Matplotlib中独立出来。
pip install mpl_finance
import warnings
warnings.filterwarnings("ignore")
import tushare as ts
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from matplotlib.pylab import date2num
import mpl_finance as mpf
import datetime
# 下面输入想要的股票代码并下载数据
pro = ts.pro_api("Your Token")
df = pro.daily(ts_code='000001.SZ', start_date='20180701', end_date='20190318')
# 将trade_date转化为时间戳数字
df["trade_date"] = df["trade_date"].map(lambda date:date2num(datetime.datetime.strptime(date,'%Y%m%d')))
# 需要按照约定的顺序来排列数据,即 matrix_data 每一行中前五个数据必须是:时间、开盘价、收盘价、最高价、最低价。
df1 = df[["trade_date","open","close","high","low"]]
# 绘制k线图
# 画布大小
Fig,(ax0,ax1) = plt.subplots(2,sharex=True,figsize=(15,8))
# 调整两个字画布大小
ax0 = plt.subplot2grid((3,1),(0,0),rowspan=2)
ax1 = plt.subplot2grid((3,1),(2,0))
# 调整上下间隔
plt.subplots_adjust(hspace=0.25)
# 在第一个子画布上画k线,第二个子画布上画柱线
mpf.candlestick_ochl(ax0,df1.values,width=1,colorup='r',colordown='g',alpha=1.0);
ax0.set_title('000001')
ax0.set_ylabel("Price")
ax0.grid(True)
plt.bar(df["trade_date"]-0.4,df["vol"],width=0.8);
ax1.xaxis_date()
ax1.set_ylabel("Volume")
plt.show()