基于Bokeh库,手把手教你制作“子弹图“和“瀑布图“!

【量化回测必看!】Backtrader保姆级教学+免费行情源 框架介绍 3min看完这边文章,backtrader的基本框架和使用方法你就懂了! backtrader作为免费的开源回测平台,功能非常强大! INSIGHT也是市面上笔者认为最好用的行情源 所以两者的结合将会产生激烈的火花! 阅读详情

首先,让我们进行导入并使 Bokeh 的输出显示在我们的笔记本中:

from bokeh.io import show, output_notebook
from bokeh.palettes import PuBu4
from bokeh.plotting import figure
from bokeh.models import Label

output_notebook()

子弹图

在这个例子中,我们将用 python 列表填充数据。我们可以修改它以适应Pandas数据框,但我们将坚持使用简单的 Python 数据类型作为本示例:


data= [("John Smith", 105, 120),
       ("Jane Jones", 99, 110),
       ("Fred Flintstone", 109, 125),
       ("Barney Rubble", 135, 123),
       ("Mr T", 45, 105)]

limits = [0, 20, 60, 100, 160]
labels = ["Poor", "OK", "Good", "Excellent"]
cats = [x[0] for x in data]

一个棘手的代码部分,是在 y 轴上的 cat 变量中构建一个类别列表。

下一步是创建散景图并设置几个与 x 轴和网格线显示方式相关的选项。如上所述,我们使用cats变量来定义y_range中的所有类别。


p=figure(title="Sales Rep Performance", plot_height=350, plot_width=800, y_range=cats)
p.x_range.range_padding = 0
p.grid.grid_line_color = None
p.xaxis[0].ticker.num_minor_ticks = 0

下一部分将使用散景的 hbar 创建彩色范围条。为了完成这项工作,我们需要定义每个条的左右范围以及颜色。我们可以使用python的zip函数来创建我们需要的数据结构。


zip(limits[:-1], limits[1:], PuBu4[::-1])

# 结果如下:
[(0, 20, '#f1eef6'),
 (20, 60, '#bdc9e1'),
 (60, 100, '#74a9cf'),
 (100, 160, '#0570b0')]

以下是如何将它们组合在一起以创建颜色范围。


for left, right, color in zip(limits[:-1], limits[1:], PuBu4[::-1]):
 p.hbar(y=cats, left=left, right=right, height=0.8, color=color)

结果如下:

图片

我们使用类似的过程,为每个性能度量添加一个黑条。


perf = [x[1] for x in data]
p.hbar(y=cats, left=0, right=perf, height=0.3, color="black")

我们需要添加的最后一个标记是一个显示目标值的段。


comp = [x[2]for x in data]
p.segment(x0=comp, y0=[(x, -0.5) for x in cats], x1=comp,
          y1=[(x, 0.5) for x in cats], color="white", line_width=2)

结果如下:

图片

最后一步是为每个范围添加标签。我们可以使用 zip 来创建我们需要的标签结构,然后将每个标签添加到布局中。


for start, label in zip(limits[:-1], labels):
    p.add_layout(Label(x=start, y=0, text=label, text_font_size="10pt",
                       text_color='black', y_offset=5, x_offset=15))

结果如下:

图片

瀑布图

构造数据框,用于作为演示的数据框。


# Create the initial dataframe
index = ['sales','returns','credit fees','rebates','late charges','shipping']
data = {'amount': [350000,-30000,-7500,-25000,95000,-7000]}
df = pd.DataFrame(data=data,index=index)

# Determine the total net value by adding the start and all additional transactions
net = df['amount'].sum()

结果如下:

图片

最终的瀑布代码将要求我们为每个段定义几个附加属性,包括:

  • 起始位置;

  • 条形颜色;

  • 标签位置;

  • 标签文字;

通过将其添加到单个数据框中,我们可以使用 Bokeh 的内置功能来简化最终代码。

对于下一步,我们将添加运行总计、段开始位置和标签的位置。


df['running_total'] = df['amount'].cumsum()
df['y_start'] = df['running_total'] - df['amount']

# Where do we want to place the label?
df['label_pos'] = df['running_total']

接下来,我们在包含净值的数据框底部添加一行。


df_net = pd.DataFrame.from_records([(net, net, 0, net)],
                                   columns=['amount', 'running_total', 'y_start', 'label_pos'],
                                   index=["net"])
df = df.append(df_net)

对于这个特定的瀑布,我希望将负值设置为不同的颜色,并设置图表下方的标签格式。让我们使用值向数据框中添加列。


df['color'] = 'grey'
df.loc[df.amount < 0, 'color'] = 'red'
df.loc[df.amount < 0, 'label_pos'] = df.label_pos - 10000
df["bar_label"] = df["amount"].map('{:,.0f}'.format)

这是包含我们需要的所有数据的最终数据框。确实需要对数据进行一些操作才能达到这种状态,但它是相当标准的 Pandas 代码,如果出现问题,很容易调试。

图片

创建实际绘图是相当标准的 Bokeh 代码,因为数据框具有我们需要的所有值。

TOOLS = "box_zoom,reset,save"
source = ColumnDataSource(df)
p = figure(tools=TOOLS, x_range=list(df.index), y_range=(0, net+40000),
           plot_width=800, title = "Sales Waterfall")

通过将 ColumnDataSource 定义为我们的数据框,Bokeh 负责创建所有段和标签,而无需进行任何循环。


          source=source, color="color", line_width=55)

我们将做一些小的格式化来添加标签并很好地格式化 y 轴。


p.grid.grid_line_alpha=0.3
p.yaxis[0].formatter = NumeralTickFormatter(format="($ 0 a)")
p.xaxis.axis_label = "Transactions"

最后一步是使用 LabelSet 将所有标签添加到条形图上。


labels = LabelSet(x='index', y='label_pos', text='bar_label',
                  text_font_size="8pt", level='glyph',
                  x_offset=-20, y_offset=0, source=source)
p.add_layout(labels)

结果如下:

图片

Python — 使用 Bokeh 进行数据可视化 是 Python 中的数据可视化库,提供高性能的交互式图表和绘图。Bokeh 输出可以在笔记本、html 和服务器等各种媒体中获得。箱线图箱线图用于表示图表上的统计数据。它有助于总结数据中存在的各种数据组的统计属性。散点图散点图用于绘制数据集中两个变量的值。它有助于找到所选的两个变量之间的相关性。直方图直方图用于表示数值数据的分布。直方图中矩形的高度与类间隔中值的频率成正比。条的长度与表示的值成比例。散点标记要创建散点圆标记,使用 circle() 方法。单行要创建单行,使用 line() 方法。 阅读详情

相关推荐

利用Backtrader进行期权回测之五:用backtrader_plotting查看回测结果

backtrader_plotting是一个扩展库,用来增强backtrader的绘图功能。它不仅功能更加强大,比如能够把结果分成多个Tab显示,而且显示效果也更加优雅美观。所以推荐大家使用这个,而不是backtrader缺省的plot功能。 安装backtrader_plotting backtrader_plotting可以通过pip进行安装: pip install backtrader_plotting 替换backtrader的plot功能 backtrader_plotting的使用也很简单。

luoqingyong的博客 9973

backtrader_plotting扩展包:用bokeh来可视化bt框架的量化结果

backtrader_plotting不只是使用bokeh替换matplotlib,它还做了大量的工作,把analyzer和observer的结果直接呈现出来,这省了我们不少事。但如果标的多,就不容易看清楚,还有一个办法,就是做一个“等权买入并持有”的策略作为基准。终值/起始值后取对数。——总收益率取对数有点不符合直觉,直接年化收益率是在总收益的基础上的,这样数字偏小101%,实际是(173%)。todo:两个策略可以一起跑,但读出来的结果不对,需要使用优化策略的方式,这个后续文章里再说明。

weixin_38175458的博客 2346

【答读者问36】使用btplotting或者backtraader_pyqt_ui增强backtrader的画图功能

此文免费,不计算在专栏中。主要是推荐btplotting这个包。 【答读者问27】backtrader不支持最新版本的matplotlib怎么办以及backtrader画图的解决方案 在答读者问27中提出了增强backtrader画图功能的三种方案,今天碰到的btplotting算是属于画图工具和结合前后端这样的模式,和plotly、dash和flask实现的画图功能应该算是同一类。 今天在github找plotly和dash给backtrader增强画图功能的模块,意外发现一个bokeh写的新的包-btp

云金杞 2907

backtrader的回测结果之Bokel quantstats backtrader_plotting btplotting

3.backtrader_plotting是Bokeh专门针对backtrader开发的模块port端口没有办法改变,不方便做成相关服务被flaskapp调用,只能单独使用https//github.com/verybadsoldier/backtrader_plotting。5.backtrader_plotly这个模块没有进行相关测试,感觉不太被维护https//github.com/lamkashingpaul/backtrader_plotly。7.如果想要一个适合自己喜欢那就动手造吧!...

m0_37411645的博客 1983

TSLA量化交易:backtrader与Bokeh可视化兼容问题全网最新解决方案

测试时间:2023年11月23日 可实现版本:matplotlib 3.6.0;backtrader 1.9.78.123;backtrader-plotting 2.0.0;numpy 1.23.5

permanentchasing的博客 911

backtrader_plotting:为 backtrader 绘制插件以支持 Bokeh(也许更多)

backtrader_plotting 为backtrader添加扩展绘图功能的backtrader ( )。 目前唯一可用的后端是Bokeh ( )。 特征 互动图 实时交易支持(需要自定义backtrader - 请参阅 Wiki 以获取更多信息) 数据回放支持 交互式backtrader优化结果浏览器(仅支持单策略运行) 可自定义的选项卡面板 高度可配置 不同的换肤主题 使用方便 需要 Python >= 3.6。 演示 在文件夹demos找到可运行的功能demos或在此处尝试现场演示: : 安装 pip install backtrader_plotting 快速开始 from backtrader_plotting import Bokeh from backtrader_plotting . schemes import Tradimo < your back

基于Bokeh库,手把手教你制作子弹图和瀑布图!

基于Bokeh库,手把手教你制作子弹图和瀑布图!

数据分析与统计学之美 1333

yolov5深度剖析+源码debug级讲解系列(一) yolov5的架构和源码debug准备

前言 前段时间分析了yolov3的源码,这次想带着小伙伴一起把yolov5完全掌握。博主还是保持着一贯的风格,依旧采用debug级别的源码剖析。目的就是让大家可以通过一个系列的文章就把yolov5的架构、设计理念和每一行源码都弄懂。只要小伙伴可以花时间把这个系列读完,就会对yolov5的理解有所提升。 去年参加了kaggle的小麦检测比赛,yolov5在比赛的中段开始呈现霸榜趋势,超越了efficientdet。虽然最后yolov5因为权限等某些问题被kaggle官方禁用了,但是仍然体现出了其强大的能力。值

人唯优的博客 4万+

Grafana Loki 配置完全指南:从 `loki.yaml` 参数详解到运行时热加载

> 本篇技术指南以 Grafana Loki 官方配置参考([docs/sources/shared/configuration.md](https://link.gitcode.com/i/c7d8fb442770b1948e744ae4e7403640))为核心骨架,系统讲解 Loki 配置的加载机制、环境变量展开、`loki.yaml` 顶层参数、核心配置块(server / storage

gitblog_00155的博客 468

ansys命令流力磁耦合仿真

文章目录前言一、力磁耦合仿真流程二、静力学仿真三、力磁耦合模型构建四、静磁学仿真总结 前言 一、力磁耦合仿真流程 力磁耦合有限元仿真流程中,首先进行静力学仿真,经过前处理模块、分析计算模块和后处理模块提取三维模型单元应力,然后根据力磁耦合方程中,通过matlab将单元应力导入到磁导率与应力的关系式中,得到单元的相对磁导率。最后采用载荷传递耦合方式,进行静磁学模拟仿真,分析计算得到该载荷下试件的磁场分布。,如下图所示为力磁耦合仿真流程图: 二、静力学仿真 下图为中心预制条形缺陷的Q235钢板试..

wsfwsf128的博客 2660

【100分】【等和子数组最小和】

逆序排序,这样能够使得在分组时优先选取较大的元素,以便将元素分配到较小的子集中,从而使得每个子集的和相对均衡。给定一个数组nums,将元素分为若干个组,使得每组和相等,求出满足条件的所有分组中,组内元素和的最小值。分成若干个组,使得每组的和相等,并求出满足条件的所有分组中,组内元素和的最小值。在递归的过程中,我们需要注意一个优化点,即避免将相同和的桶重复计算。4 个子集(5),(1,4),(2,3),(2,3)2 个子集(5, 1, 4),(2,3, 2,3)个子集,则返回子集和的最小值,如果不能,则将。

weixin_54707168的博客 1167

pbpython交互式应用开发:构建企业级数据仪表板的完整流程

在当今数据驱动的商业环境中,企业级数据仪表板已成为决策支持的核心工具。pbpython作为专注于实用商业Python开发的开源项目,提供了丰富的代码、笔记本和示例,帮助开发者快速构建交互式数据应用。本文将详细介绍如何利用pbpython的资源,从零开始打造专业的数据仪表板,无需深厚的编程背景也能轻松上手。 ## 为什么选择pbpython进行数据仪表板开发? pbpython项目(Code,

gitblog_00092的博客 409

挖矿病毒解决实例(隐藏进程,文章较好)(入侵)

CPU起飞了 最近有朋友在群里反馈,自己服务器的CPU一直处于高占用状态,但用top、ps等命令却一直找不到是哪个进程在占用,怀疑中了挖矿病毒,急的团团转。 根据经验,我赶紧让他看一下当前服务器的网络连接,看看有没有可疑连接,果然发现了有点东西: 上Shodan查一下这IP地址: 反向查找,发现有诸多域名曾经解析到这个IP地址: 这是一个位于德国的IP地址,开放了4444,5555,7777等数个特殊的服务端口: 其中这位朋友服务器上发现的连接到的是7777端口,

墨痕诉清风的博客 1万+

掌握Python库的Bokeh,就能让你的交互炫目可视化

Bokeh允许用户自定义工具提示的内容和样式,以更好地满足项目需求。以下是一个自定义工具提示的例子:# 创建绘图对象p = figure(title="自定义工具提示示例", x_axis_label='X轴', y_axis_label='Y轴')# 绘制散点图# 自定义工具提示hover = HoverTool(tooltips=[("数值", "@x, @y"), ("额外信息", "自定义信息")], renderers=[scatter])

Fly2024124的博客 1101

FPGA实现DDR接口

verilog// DDR2控制器状态机// 初始化序列// 发出初始化命令endendendend// 自动预充电end// 其他状态...endcaseendend。

whm128的博客 998

【在 WSL2 GUI 中使用 pulseaudio 播放声音】

最近在搞一个Linux项目,由于WSL2中需要用到声音外放,无奈只能潜心研究。后来就使用了一种折中的方式替代,那就是pulseaudio。目前来讲WSL2对硬件外设的支持还是不太友好,关于USB的支持我之前在其他文章中已经论述过了,这里不讨论。1、Windows11别忘记打开声音2、可能有一定延迟,因为是通过网络传输的。3、效果的话只能见仁见智了,如果不能满足要求就安装一个实实在在的Ubuntu吧!

jiexijihe945的博客 4530

【数据可视化】Python中使用Bokeh进行数据可视化,第一部分:入门

提升您的可视化游戏 如果没有有效的方法来传达结果,最复杂的统计分析可能毫无意义。最近我在研究项目中的经验使我们利用数据科学来提高建筑能效,从而推动了这一点。在过去的几个月里,我的一个团队成员一直致力于一种称为小波变换的技术,该技术用于分析时间序列的频率成分。该方法取得了积极的成果,但她在解释它时遇到了麻烦而没有迷失在技术细节中。 被激怒了,她问我是否可以通过视觉展示转变。在几分钟内使用一个名为...

探索世界,改变世界 3338

【原创】汇川H5U PLC控制伺服的方法

6、在线调试-进入伺服调试,可以在本软件上进行调试,可以实现原点回归、正向点动、反向电动、使能(这里使能打开时触摸屏上的使能不能打开,会冲突)、复位、停止(如下图所示)。5、在原点返回设置中一般情况下对原点信号、正限位、负限位、原点返回方向、原点返回方式进行设置,其他设置默认不改(如下图所示)。3、在单位换算设置上只需要修改脉冲数和移动量(根据伺服配套导轨上名牌进行设置),其他设置默认不改(如下图所示)。11、双击后右边出现编辑框 在上半部分定义变量(IN、INOUT、OUT、VAR)(如下图所示)。

Qinmingyue13的博客 6662

python可视化技巧:小小“瀑布图“,轻松拿捏!

瀑布图(Waterfall Chart)是一种专门用于表现数据在一系列变化后累积效果的图表类型,它通过一连串的垂直条形来可视化数据随时间或其他顺序变量的变化过程,尤其强调从一个初始值到最终值之间每个阶段对总体数值的贡献或影响。这种图表因其形态类似瀑布流水逐级递进或退减而得名。追踪变化过程:非常适合展示某个总量如何被不同的部分(如收入、支出、成本、利润等)逐步累加或减少的过程,从而清晰地看出哪些环节对总量产生了正向或负向的影响。财务分析。

xjt921122的博客 2239

华为ONU远程登录管理配置

华为P602E、EG8040CONU、EG8240H5、W626E等ONU、ONT默认无法配置管理IP,无法远程telnet登录管理。校园网项目中因故障诊断需要远程登录ONU可以通过OLT的远程WEB代理功能链接登录,具体配置如下:

symstandsun的博客 6108

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

backtrader回测框架实例

详细的介绍backtrader回测的框架和主要功能,以BOLL线为例展示了交易策略开发及回测过程。

halps的专栏 7973

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python 绘制惊艳的瀑布图

公众号后台回复“图书“,了解更多号主新书内容 作者:云朵君 来源:数据STUDIO写在前面瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响。瀑...

数据森麟 2796

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

bokeh参数设置详解

p.xaxis.axis_label_text_font_style="FangSong"#设置字体。p.min_border_bottom=10#外边界背景-----下宽度。p.min_border_left=80#外边界背景-----左边宽度。p.min_border_right=80#外边界背景-----右边宽度。p.min_border_top=10#外边界背景-----上宽度。p.outline_line_alpha=0.3#边框透明度。.........

bingbangx的博客 1445

如何使用Python 绘制惊艳众人的瀑布图_python 瀑布图

让我们举个例子来了解何时何地使用瀑布图,因为制作瀑布图不是什么大问题。我们将使用一些虚拟数据和 Kaggle 数据集来构建瀑布图。

2401_84140776的博客 473

瀑布图有什么用?怎么画?

作者:林骥 来源:林骥引言瀑布图,因为形似瀑布而得名,它能够比较好地体现数据分析的对比思维和细分思维。比如说,假设某公司一月份销售额 1000 万,二月份销售额 50...

数据森麟 4932

backtrader_plotly库画出backtrader运行结果

backtrader_plotly库相比Bokeh的优势在于支持将图表保存为HTML文件并单独打开。使用该库时,首先导入BacktraderPlotly和PlotScheme(可选样式调整),运行回测后切换plot引擎为BacktraderPlotly,它会返回go.Figure对象列表。通过plotly接口,可以调用show()方法在浏览器直接查看图表,或使用write_html()保存为HTML文件。这种灵活的交互式可视化方案便于分享和分析回测结果。

tatkeieng的博客 297
上一篇: Python 中 -m 的典型用法、原理解析与发展演变
下一篇: 如何用 SQL 做留存率分析?
编程老袁
博客等级 码龄5年 588粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值