You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bokeh绘制1分钟K线图时如何在相邻蜡烛柱间设置小间隙

解决Bokeh 1分钟粒度K线拥挤、增加柱间隙的方法

核心原理

蜡烛柱完全相邻无间隙的原因很简单:绘制蜡烛实体时,vbar的宽度设置成了和单根K线时间粒度完全相等的长度(刚好1分钟)。在datetime类型的坐标轴下,vbar的width参数直接对应柱子横向占据的时间长度,只要按比例缩小这个宽度,相邻柱子之间自然会留出空隙,不需要做复杂的坐标偏移或者自定义图层。

操作步骤

  • 调整硬编码的宽度值
    现在代码里调用fig.vbar时,直接把宽度写死为timedelta(minutes=1),把这个值改成单根K线时间粒度的70%-90%,剩下的比例就会成为相邻柱子的间隙。
    比如想要留20%的视觉空隙,就把宽度设为timedelta(seconds=48)(对应1分钟长度的80%)。间隙大小可以边调边看效果:觉得太挤就再缩小宽度,觉得柱子太细辨识度低就适当增大宽度。
  • 清理无效的常量定义
    代码开头定义的VBAR_WIDTH目前完全没有被实际调用,而且它的数值(606010000毫秒=10000小时)存在明显计算错误,可以直接删除,或者把它替换成实际需要的宽度值,统一在代码开头维护,后续切换K线时间粒度时只需要修改这一处数值即可。

替换后的核心代码片段

# 在代码开头统一定义蜡烛实体宽度,按1分钟粒度的80%设置
KLINE_BODY_WIDTH = timedelta(seconds=48)

# 绘制蜡烛图的实体(开盘价与收盘价)
r1 = fig.vbar(x='time_stamp', width=KLINE_BODY_WIDTH, 
         top='price_open', bottom='price_close', 
              source=cds, view=view_inc,
              fill_color=GREEN, line_color="black")
r2 = fig.vbar(x='time_stamp', width=KLINE_BODY_WIDTH, 
         top='price_open', bottom='price_close', 
         source=cds, view=view_dec,
         fill_color=RED, line_color="black")

补充说明:高低价的竖线(segment)是绘制在每根K线的中心时间点上,不受vbar宽度影响,不需要额外调整位置。后续如果切换到5分钟、1小时等更大粒度的K线,只要按照同样的比例(取单根时间粒度的70%-90%长度)调整宽度参数,就能保持统一的视觉间隙效果。

内容的提问来源于stack exchange,提问作者mHelpMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 20:36:10