Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)
2020.08.09更新:mplfinance模块在两个月前有更新(新版:0.12.6a3),有些参数有新的变化,详见正文内容。
目录(续二)
- 三、make_addplot的基本用法
- 把数据分析的结果标记到图像中
- **2020.08.09(v=0.12.6a3)更新make_addplot(一)**
- 在副图中绘制
- **2020.08.09(v=0.12.6a3)更新make_addplot(二)**
- **2020.08.09(v=0.12.6a3)更新plot(一)**
- 修改主图Y轴刻度位置和设置线形
- 四、marketcolors和mpf_style以及其他常用设置
- marketcolors设置图表颜色
- 添加图表样式
- **2020.08.09(v=0.12.6a3)更新plot(二)**
续:
Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(一)
三、make_addplot的基本用法
在金融数据分析中,我们要通过数据可视化展示的不仅是’Open’, ‘High’, ‘Low’, 'Close’和最常见‘ma’,还有一些其他分析数据,那么就要用到make_addplot()方法了,make_addplot可以接受一个pandas、numpy、array以及list格式的数据(tuple不可以),和**kwargs参数;需要注意的是:传递给make_addplot的数据参数必须与将来画图传递给plot的数据参数行数相同,**kwargs参数将全部传递到polt方法中。
下面准备了一组数据,但是column有点长,不能全部输出,这里分布输出了数据的columns和一部分数据:
Index(['Open', 'High', 'Low', 'Close', 'Volume', 'UpperB', 'LowerB', 'PercentB'],dtype='object')Open High ... LowerB PercentB
Date ...
2011-07-01 132.089996 134.100006 ... 125.316073 1.219057
2011-07-05 133.779999 134.080002 ... 124.912703 1.066618
2011-07-06 133.490005 134.139999 ... 124.627085 0.992467
2011-07-07 135.160004 135.699997 ... 124.284986 1.026222
2011-07-08 133.830002 135.360001 ... 124.140890 0.885916
... ... ... ... ... ...
2012-06-25 132.050003 132.100006 ... 128.120436 0.381896
2012-06-26 131.699997 132.380005 ... 128.084306 0.470585
2012-06-27 132.419998 133.429993 ... 128.140042 0.605441
2012-06-28 132.289993 132.990005 ... 128.219241 0.551922
2012-06-29 135.199997 136.270004 ... 128.792993 0.921670[252 rows x 8 columns]
add_plot = mplfinance.make_addplot(data['LowerB'])
mplfinance.plot(data, addplot=add_plot)
plt.show() # 显示
输出结果:
如果要给图表添加多个数据绘制,直接用列表传入make_addplot即可,例如:
add_plot = mplfinance.make_addplot(data[['UpperB', 'LowerB']])
mplfinance.plot(data, addplot=add_plot)
plt.show() # 显示
输出结果:
把数据分析的结果标记到图像中
数据分析和可视化的目的是有分析结果,直接把结果展示的图表上将更加直观。先做个简单的数据分析,并把分析结果赋值到两个列表中,然后在绘图时标记到图表中,因为这里是标记,并非连续的线
,此时可以在make_addplot方法中使用marker,以及markersize和color设置标记的大小和颜色,这些参数都是直接传递给plot方法的。
def data_analyze(self, data: pandas.DataFrame):"""简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。:param data::return:"""if data.shape[0] == 0:data = self.datas_list = []b_list = []b=-1for i, v in data['High'].iteritems():if v > data['UpperB'][i] and (b == -1 or b == 1):b_list.append(data['Low'][i])b = 0else:b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):s_list.append(v)b = 1else:s_list.append(numpy.nan)return b_list, s_listb_list, s_list = self.data_analyze(data)add_plot = [mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),mpf.make_addplot(data[['UpperB', 'LowerB']])]mpf.plot(data, type='candle', addplot=add_plot, volume=True)plt.show() # 显示
输出结果:
2020.08.09(v=0.12.6a3)更新make_addplot(一)
mpf.make_addplot的关键字参数scatter=True是绘制散点图的意思,新版更新为:type=‘scatter’,改成这种赋值模式个人的感觉就是在样式上做了功能扩展,仔细查看文档后果然:旧版绘制模式只有两种scatter=True或者line=True,而新版更新后增加了三种样式:‘bar’, ‘ohlc’, and ‘candle’,这个更新非常必要呀,之前附图只是 画成交量,现在可以画任意图像和数据了,比如两个不同蜡烛图对比。上面的代码中添加绘制数据的列表变量add_plot可以修改为:
add_plot = [mpf.make_addplot(b_list, type='scatter', markersize=200, marker='^', color='y'),mpf.make_addplot(s_list, type='scatter', markersize=200, marker='v', color='r'),mpf.make_addplot(data[['UpperB', 'LowerB']])]mpf.plot(data, type='candle', addplot=add_plot, volume=True)
这里 修改type=‘scatter’,没有使用其他格式,是怕给大家造成误解,因为这里直接修改其他模式是不行的,甚至会报语法错误,因为我们的原始数据是 不连续的,与主图的原始数据data不是一一对应的,无法使用其他模式,如果你要使用其他模式首先要 数据格式正确,比如你要绘制ohlc,那么给出的绘制数据就应该与原数据data格式相同。
在副图中绘制
plot绘图时是可以直接通过参数添加成交量副图的,如果想在副图中绘制数据可以在make_addplot中使用参数panel,直接上代码:
def data_analyze(self, data: pandas.DataFrame):"""简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。:param data::return:"""if data.shape[0] == 0:data = self.datas_list = []b_list = []b=-1for i, v in data['High'].iteritems():if v > data['UpperB'][i] and (b == -1 or b == 1):b_list.append(data['Low'][i])b = 0else:b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):s_list.append(v)b = 1else:s_list.append(numpy.nan)return b_list, s_listb_list, s_list = self.data_analyze(data)add_plot = [mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),mpf.make_addplot(data[['UpperB', 'LowerB']]),mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),]mpf.plot(data, type='candle', addplot=add_plot, volume=True)plt.show() # 显示
输出结果:
这里注意的是副图的左右两侧都有Y轴标,而且数据不同,因为mplfinance为完整展示图像,自动分成了两个坐标轴,如果你绘制的数据较多,这里有可能会报错,如果出现这种情况,在使用plot绘制多组数据时需要使用参数secondary_y,有三个参数选项True, False, 和auto,默认是auto,因为绘制数据多出现报错时只能设置secondary_y=true(使用Y轴标)或/False(不使用)来覆盖,如果数据差异很大,设为False可能会导致看不到(实际上还是绘制了,只是在最顶上或最底下一条线看不清而已)。
2020.08.09(v=0.12.6a3)更新make_addplot(二)
旧版的mpf.make_addplot的关键字参数panel='lower’是在附图中绘制,新版改为:panel=1;默认是panel=0的,也就是说主图面板为0,附图为1,既然可以为1那么就可能有2、3、…、9,明显是新版可以绘制多个附图了!最多绘制9个附图。
2020.08.09(v=0.12.6a3)更新plot(一)
与上面的更新对应,既然可以绘制1、2、3…多个附图,那么在plot时就应该可以设置附图的比例,所有,plot中增加了参数:panel_ratios=(1, 1)来设置主图和附图的比例,第一个参数数主图,往后依次是附图,r如果有两个附图,比如:panel_ratios=(1, 1,0.5)。默认情况下主图高度是附图 的2.5倍。
修改主图Y轴刻度位置和设置线形
在绘图plot函数中使用关键字参数style='sas’可以把主图Y左边放到右边,默认是‘default’,
设置线型是参数linestyle,直接上代码吧,都是常用的参数:
def data_analyze(self, data: pandas.DataFrame):"""简单的数据分析,并把返回数据分析结果列表,分析的逻辑不重要,主要看如何绘制到图形中。:param data::return:"""if data.shape[0] == 0:data = self.datas_list = []b_list = []b=-1for i, v in data['High'].iteritems():if v > data['UpperB'][i] and (b == -1 or b == 1):b_list.append(data['Low'][i])b = 0else:b_list.append(numpy.nan) # 这里添加nan的目的是,对齐主图的k线数量if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):s_list.append(v)b = 1else:s_list.append(numpy.nan)return b_list, s_listb_list, s_list = self.data_analyze(data)
add_plot = [mpf.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),mpf.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),mpf.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),mpf.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]
mpf.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style='default')
plt.show() # 显示
输出结果:
这里需要注意的是style只能在plot方法中使用,不能在make_addplot方法中使用,而linestyle两者都可以用。
四、marketcolors和mpf_style以及其他常用设置
marketcolors设置图表颜色
"""
make_marketcolors() 设置k线颜色
:up 设置阳线柱填充颜色
:down 设置阴线柱填充颜色
:edge 设置蜡烛线边缘颜色 'i' 代表继承k线的颜色
:wick 设置蜡烛上下影线的颜色
:volume 设置成交量颜色
:inherit 是否继承, 如果设置了继承inherit=True,那么edge即便设了颜色也会无效
"""
my_color = mplfinance.make_marketcolors(up='cyan', down='red', edge='black', wick='black', volume='blue')
添加图表样式
这里的设置应该在plot方法之前设置,而设置完成marketcolors后需要使用mpf_style添加设置,最后plot()方法的关键字参数style=my_style 才会生效。下面添加mpf_style,最后一起展示效果。
"""
make_mpf_style() 设置mpf样式
:gridaxis:设置网格线位置,both双向
:gridstyle:设置网格线线型
:y_on_right:设置y轴位置是否在右
"""
my_style = mplfinance.make_mpf_style(marketcolors=my_color, gridaxis='both', gridstyle='-.', y_on_right=True)
这里要注意的是前面make_marketcolors的设置,必须这里作为关键字参数添加进来。其他几项常用设置:title:设置标题;ylabel 设置主图Y轴标题;ylabel_lower 设置成交量Y轴标题;savefig:导出图片路径以及文件名(包括后缀)。
最后一步绘图:
b_list, s_list = self.data_analyze(data)
add_plot = [mplfinance.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),mplfinance.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),mplfinance.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),mplfinance.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),mplfinance.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]
"""
plot绘图的部分参数
:type设置图像类型'ohlc'/'candle'/'line/renko'
:mav 绘制平局线
:show_nontrading= True 显示非交易日(k线之间有间隔),False 不显示交易日,k线之间没有间隔
:title:设置标题
:ylabel=设置主图Y轴标题
:ylabel_lower 设置成交量一栏Y坐标标题
:figratio:设置图形纵横比
:figscale 设置图像的缩小或放大,1.5就是放大50%,最大不会超过电脑屏幕大小
:style 设置整个图表样式,可以使用前面设置的样式my_style,只能在plot函数中使用指定整个图表样式,不能在make_addplot中使用。
savefig:导出图片,填写文件名及后缀
"""
mplfinance.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style=my_style,title='****报价', figratio=(5, 5), ylabel='价格', ylabel_lower='成交量', savefig='my_image.png')
plt.show() # 显示
输出结果:
2020.08.09(v=0.12.6a3)更新plot(二)
旧版plot可以通过参数savefig设置图像保存,保存的同时并不 影响 显示,而新版一旦设置了savefig图像将直接保存不再显示!
(持续未完)
续三:
Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(三)
Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)相关推荐
- python中import re_Python3中正则模块re.compile、re.match及re.search函数用法详解
本文实例讲述了Python3中正则模块re.compile.re.match及re.search函数用法.分享给大家供大家参考,具体如下: re模块 re.compile.re.match. re.s ...
- python通过新 mplfinance 模块绘制 k 线图
python通过新 mplfinance 模块绘制 k 线图 最近绘制 k 线图发现mplfinance从matplotlib中独立出来了,作为一个单独的模块,并且可以直接使用Pandas 的Data ...
- python gpu加速库比matlab快吗_Python之Unittest和Requests库详解
1.按类来执行 import unittest class f1(unittest.TestCase): def setUp(self): pass def tearDown(self): pass ...
- python类装饰器详解-Python类中的装饰器在当前类中的声明与调用详解
我的Python环境:3.7 在Python类里声明一个装饰器,并在这个类里调用这个装饰器. 代码如下: class Test(): xx = False def __init__(self): pa ...
- 站长在线Python精讲:Python中集合的交集、并集、差集和对称差集运算方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<Python中集合的交集.并集.差集和对称差集运算方法详解>.主要讲的是集合运算的相关的概念,及运算方法,包括:集合的交集. ...
- 国开网计算机应用基础模块4,2020春国开《-计算机应用基础》模块4 PowerPoint2010客观题...
<2020春国开<-计算机应用基础>模块4 PowerPoint2010客观题>由会员分享,可在线阅读,更多相关<2020春国开<-计算机应用基础>模块4 P ...
- 全网最全的Windows下Anaconda2 / Anaconda3里Python语言实现定时发送微信消息给好友或群里(图文详解)...
不多说,直接上干货! 缘由: (1)最近看到情侣零点送祝福,感觉还是很浪漫的事情,相信有很多人熬夜为了给爱的人送上零点祝福,但是有时等着等着就睡着了或者时间并不是卡的那么准就有点强迫症了,这是也许程序 ...
- python 3.6.0新语法_详解Python3.6正式版新特性
按照Python官网上的计划,Python3.6正式版期望在2016-12-16号发布,也就是这周五.从去年的5月份开始,Python3.6版本就已经动手开发了,期间也断断续续的发布了4个Alpha版 ...
- python脚本语言采用声音作为手段_python 利用pyttsx3文字转语音过程详解
这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下# -*- coding: utf ...
- python串口数据分包_python TCP Socket的粘包和分包的处理详解
概述 在进行TCP Socket开发时,都需要处理数据包粘包和分包的情况.本文详细讲解解决该问题的步骤.使用的语言是Python.实际上解决该问题很简单,在应用层下,定义一个协议:消息头部+消息长度+ ...
最新文章
- 2022-2028年中国PVC糊树脂行业市场深度分析及市场规模预测报告
- DWM1000 长距离模块讨论
- JVM年轻代,老年代,永久代详解
- 0基础学习ios开发笔记第二天
- NET Framework 4.0 安装失败:安装时发生严重错误
- 调用GPU进行神经网络的训练 GPU环境的搭建
- [转]用Gmail账户来代替Sharepoint邮件配置
- API 的5 大身份验证安全隐患
- php 或取域名的ip,php如何获取域名IP地址代码函数
- 记录贴,使用PDFviewer时遇到的导入问题
- android 系统的切图方式_Android UI设计及切图
- Fluent动网格知识汇总
- 3d游戏开发实训一周总结 3
- vue中yarn install报错:info There appears to be trouble with your network connection. Retrying…
- 如何让不给听得ge乖乖听话?python教你如何做...
- Linux下基于Openstack安装部署私有云
- oracle12c数据库命令,oracle 12c 常用命令
- python 字符串前面加 u, r, b的含义
- 好吧! 阿达 奥古尼斯
- 如何用一张照片证明你是老网民?