【python】matplotlib模块

重点研究matplotlib在量化投资中的应用

文章目录

  • 1.安装
  • 2.介绍
  • 3.基本图表绘制
    • 3.1 单图绘制
    • 3.2 多图绘制
  • 4. 绘制K线图
    • 4.1 安装tushare和mpl_finance
    • 4.2 绘制K线图示例


1.安装

pip install matplotlib

2.介绍

Matplotlib的基础知识如下:

  1. Matplotlib中基本图表的元素包括x轴和y轴、水平和垂直的轴线。
    x轴和y轴使用刻度对坐标轴进行分隔,包括最小刻度和最大刻度;
  2. hold属性默认为True,允许在一副图中绘制多条曲线。
  3. 使用grid方法为图添加网格线,方法为设置grid参数(参数和plot()函数相同),lw代表linewidth(线的粗细),Alpha(表示线的明暗程度)。
  4. axis方法如果没有任何参数,返回当前坐标轴的上下限
  5. 除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴的范围
  6. legend方法如下

3.基本图表绘制

3.1 单图绘制

在同一个图中绘制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)

【python】matplotlib模块_第1张图片

让我们给它添加一个标题,更改线条样式,设置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)

【python】matplotlib模块_第2张图片

3.2 多图绘制

如果要绘制多个图表,可以给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))

【python】matplotlib模块_第3张图片
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--')

【python】matplotlib模块_第4张图片
在一张图中显示多个子图

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=':')

【python】matplotlib模块_第5张图片

4. 绘制K线图

4.1 安装tushare和mpl_finance

  • Tushare官网地址是财经数据接口包,拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据
  • 提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证
  • SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用
pip install tushare

mpl_finance是python中用来绘制蜡烛图、线图的分析工具,目前已经从Matplotlib中独立出来。

pip install mpl_finance

4.2 绘制K线图示例

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()

【python】matplotlib模块_第6张图片

你可能感兴趣的:(python,matplotlib,python,开发语言)