【python】matplotlib模块

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


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)

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
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=':')

在这里插入图片描述

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

在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m 宽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值