plotly是一款可以动态展示图型的可视化工具,但是网上的教程相对比较混乱,所以我写了一个针对金融分析的作图笔记。

其实plotly的封装cufflinks就能很好的解决金融图表问题,但是cufflinks对子图的支持十分不友好,最终还是放弃,决定还是使用纯plotly。

先给各位看一下效果

一、多子图基本步骤讲解

1、首先导入所需库

import pandas as pd
import talib
import plotly.graph_objs as go
from plotly.subplots import make_subplots

2、然后画子图的画布

fig = make_subplots(rows=2, cols=1, shared_xaxes=True,row_heights=[0.8,0.2])"""
1、其中row表示行、cols表示列2、shared_xaxes=True  表示x轴共用,这样移动一个表适合另一个也会一起动,方便分析时序图标3、row_heights=[0.8,0.2]   表示第一行站0.8,第二行占0.2其他的自己举一反三即可
"""

3、画布制作好了就可以增加数据了 

     首先是fig.add_trace 可以理解加一个线,加一条线就写一个fig.add_trace

     go.Candlestic是k线图(蜡烛图)

fig.add_trace(go.Candlestick(x=df.index, open=df.Open, high=df.High, low=df.Low, close=df.Close,increasing_line_color='green', decreasing_line_color='red', name='日K线'), row=1, col=1)

4、灵魂来了,那么我总共分了两个,我想在k线上加三条辅助线,下面的子图不变,那么怎么让          辅助线道第一个子图而不是第二个子图去呢,这就是需要这里的row和col

      row表示行,col表示列

      row = 1,col = 1表示 这个k线是在第一行,第一列的图上

5、 知道了这个我们就可以添加其他线条去不同子图了。

# 加DC指标的三条线  每条都去第一行第一列的子图去
fig.add_trace(go.Scatter(x=df.index, y=df.t_up, marker_color='yellow', name='T', line=dict(width=1)), row=1, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df.t_low, marker_color='blue', name='M', line=dict(width=1), fill='tonextx',fillcolor='rgba(0,191,255,0.1)'), row=1, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df.t_middle, marker_color='blue', name='L', line=dict(width=1)),row=1, col=1)# 加RSI的一条线  到第二行第一列的子图去
fig.add_trace(go.Scatter(x=df.index, y=df.RSI, marker_color='white', name='R', line=dict(width=1)), row=2, col=1)

 6、但是线宽是如何设置的呢,毕竟辅助线不能和大老粗一样影响我们分析,改变线条的宽度的地方就在这里,marker_color是改变线条颜色, line=dict(width=1)为改变线条粗度,

line可以改变线条的样式,需要的可以自己百度学习

7、有些指标,比如布林、唐奇安等是一个区间,那么怎么填充呢

这里就是fill的所有属性,至于怎么才是正确填充,各位多试试吧,我暂时也没理解,但是试个三四次就能试验出来。

  • tozerox 和 tozeroy 分别表示填充曲线到x=0和y=0的区域;
  • tonextx 和 tonexty 分别表示填充曲线到x和y方向上的前一条曲线之间的区域,如果前面没有曲线,则效果同tozerox 和 tozeroy;
  • toself 表示将曲线的各端点连接成闭合的形状;
  • tonext 表示将2条曲线各端点均连接成闭合的形状,前提是一条曲线包围另一条曲线

填充后,你会发现你的属于不透明的,改策划给你透明就是修改fillcolor,里面的rgba里面的a属性就是修改透明度(我改成立0.1)

 

 8、做完后可以fig.show()看一下,发现下面的子图多一个滑块,其实这个滑块可以全局看图,但是这里我们不需要,我们可以通过xaxis_rangeslider_visible=False属性去掉。

 9、记得添加主题背景,不然你的图会是白色的

fig.update_layout(xaxis_rangeslider_visible=False)# 加一个黑色的主题背景
fig["layout"]["template"] = "plotly_dark"fig.show()

上面的完整代码(需要自己有数据,直接跑不通,直接复制粘贴的可以走了)

import pandas
import pandas as pd
import talib
import plotly.graph_objs as go
from plotly.subplots import make_subplots# 写入你自己的文件
# filepath = r'C:\Users\17671\Desktop\histoy\123.csv'
pds = pd.read_csv(filepath, encoding='gbk')
df = pds[0:1000]
df['RSI'] = talib.RSI(df['Close'], timeperiod=28)
a = pandas.DataFrame()
b = pandas.DataFrame()
df.fillna(0)
for i in range(56):a[f's{i}_high'] = df['High'].shift(i)b[f's{i}_low'] = df['Low'].shift(i)
a.fillna(0)
b.fillna(0)# 唐奇安上阻力线 - 由过去N天的当日最高价的最大值形成。
df['t_up'] = a.max(axis=1)
# #
# 唐奇安下支撑线 - 由过去N天的当日最低价的最小值形成。
#
df['t_low'] = b.min(axis=1)
# 中心线 - (上线 + 下线)/ 2
df['t_middle'] = (df['t_up'] + df['t_low']) / 2fig = make_subplots(rows=2, cols=1, shared_xaxes=True,row_heights=[0.8,0.2])
fig = go.FigureWidget(fig)
fig.add_trace(go.Candlestick(x=df.index, open=df.Open, high=df.High, low=df.Low, close=df.Close,increasing_line_color='green', decreasing_line_color='red', name='日K线'), row=1, col=1)# 加唐奇安通道
fig.add_trace(go.Scatter(x=df.index, y=df.t_up, marker_color='yellow', name='T', line=dict(width=1)), row=1, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df.t_low, marker_color='blue', name='M', line=dict(width=1), fill='tonextx',fillcolor='rgba(0,191,255,0.1)'), row=1, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df.t_middle, marker_color='blue', name='L', line=dict(width=1)),row=1, col=1)
fig.add_trace(go.Scatter(x=df.index, y=df.RSI, marker_color='white', name='R', line=dict(width=1)), row=2, col=1)fig.update_layout(xaxis_rangeslider_visible=True, xaxis_rangeslider_thickness = 0.04)
fig["layout"]["template"] = "plotly_dark"fig.show()

还有一个需求我目前没有想到,就是如何实时更新

 我的想法是通过离线模式,生成html文件,然后通过定时任务刷新这个文件,实时更新这个文件,如果有更好的方法还麻烦告知。

 

金融分析:图形可视化plotly绘图思路—多子图教程相关推荐

  1. MATLAB数学建模:数据图形可视化-三维绘图函数

    5.1 绘制三维曲面 文章目录 5.1 绘制三维曲面 5.2 生成栅格数据 5.3 绘制网格曲面命令 5.4 隐藏线的显示和关闭 在 MATLAB 中, 我们可使用函数 surf 和 surfc 绘制 ...

  2. 可视化神器Plotly玩转多子图绘制

    公众号:尤而小屋 作者:Peter 编辑:Peter 可视化神器Plotly玩转多子图绘制 大家好,我是Peter~ 很长时间没有Plotly绘图的文章,之前已经介绍如何绘制柱状图.饼图.小提琴图.桑 ...

  3. 【数据分析师---数据可视化】第二章:plotly绘图基础篇

    plotly绘图基础篇 1 Plotly简介与安装 2 Plotly简单绘图入门 3 Plotly绘制散点图和饼图 4 Plotly绘图流程详细梳理 5 Plotly绘制密度图和三维散点图 5.1 绘 ...

  4. 编程软件python图片-python Plotly绘图工具的简单使用

    1.plotly库的相关介绍 1)相关说明 plotly是一个基于javascript的绘图库,plotly绘图种类丰富,效果美观: 易于保存与分享plotly的绘图结果,并且可以与Web无缝集成: ...

  5. python绘制饼图-Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  6. python如何绘制饼图_Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  7. [Python]可视化函数绘图计算器

    基于matplotlib的可视化函数绘图计算器的实现 前言 设计实现 分工设计 目标功能 实现过程 1.用户界面设计 2.表达式以LaTeX格式显示 3.二维绘图 4.三维绘图 4.求解线性方程组 特 ...

  8. IEC61131, IEC61499图形可视化,PLC图形可视化,PLC组态,VBScript和JavaScript脚本,解决方案源代码, 开发平台100% VC++源码2018!

    IEC61131, IEC61499图形可视化,PLC图形可视化,PLC组态,VBScript和JavaScript脚本,解决方案源代码, 开发平台100% VC++源码2018! -- 全球领先. ...

  9. plotly绘图原理

    目录   1.plotly库的相关介绍   2.导入相关库   3.plotly绘图原理   4.保存图形的两种方式   5.绘制双y轴图   6.绘制多子图:一个画布上绘制多个图形 1.plotly ...

最新文章

  1. 编写程序将字符串中最长的单词输出
  2. 用脑电波玩游戏,这款VR体验逆天了
  3. 【分享】(性能优化)思考数据列表中“特殊的列”
  4. php 访问网页返回值,Ping网站并用PHP返回结果
  5. idea @Data 不起作用找不到 相关的注解
  6. 【转】1.C Task.CompletedTask和Task.Result小记
  7. 万亿级新基建战场,阿里云的安全“防线”
  8. observer 观察者模式
  9. Keil v5安装和使用
  10. c语言社交网络,【C++】设计并实现一种简单的社交网络模型图
  11. EasyAR WebAR开发
  12. 基于Web的建筑智能化系统集成组态软件的设计与应用
  13. 外键的约束(Mysql、PostgreSQL)
  14. 房价收入比最高20倍 相关专家认为楼市泡沫已现
  15. 研究人员发现英特尔芯片组中可能被黑客使用的“新功能”VISA
  16. [CSP-S模拟测试]:跳房子(模拟)
  17. csr867x入门之提示音配置(十二)
  18. TPM零知识学习七 —— tpm模拟器安装
  19. 2.1 TGA图像文件格式解析
  20. appcrash php5ts.dll,appcrash

热门文章

  1. 谈谈结果导向的做事方式
  2. DBFS CLI : 02-文件操作相关常用命令
  3. 大型多人在线游戏服务器架构设计
  4. arcgis 栅格数据热点分析
  5. excel中DATE(year,month,day)函数——oracle自定义函数
  6. 计算机程序设计表单,表单模板和表单简介
  7. python删除相似度高的图片
  8. matlab 邦加球,吴先良(软件学院)老师 - 安徽大学
  9. java获取工作日 日历接口_节假日api接口之获取指定日期的节假日信息
  10. MonoRail学习笔记六:Filter功能使用