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

如何使Plotly的rangeselector选择时同步应用rangebreak的排除规则

问题原因

这个异常是Plotly中rangeselector和rangebreak配合的默认逻辑导致的:

  • 你设置的1d按钮用了step="day"、stepmode="backward"参数,点击时Plotly会直接生成过去24个自然小时的时间范围,而不是自动对齐到交易时段
  • 如果生成的时间范围的起点/终点落在非交易时段内,rangebreak的默认逻辑只会移除完全落在所选范围内部的非交易时段,对边界处的非交易时段会默认保留用于填充区间,所以会显示盘外时间
  • 2天及以上的时间范围通常包含完整的交易日,非交易时段完全落在区间内部,所以会被正常隐藏

解决方法

给rangebreaks的每个规则添加dvalue参数,强制Plotly识别并隐藏所有符合边界规则的时段,不受时间范围起止点的影响。dvalue参数单位为毫秒,对应你要隐藏的时段的最小时间间隔:

_ = fig.update_xaxes(
    rangeslider_visible=True,
    rangeselector=dict(
        buttons=[
            dict(count=6.5, label="Intraday(6.5hrs)", step="hour", stepmode="todate"),
            dict(count=1, label="1d", step="day", stepmode="backward"),
            dict(count=2, label="2d", step="day", stepmode="backward"),
            dict(count=3, label="3d", step="day", stepmode="backward"),
            dict(count=4, label="4d", step="day", stepmode="backward"),
            dict(count=5, label="5d", step="day", stepmode="backward"),
            dict(step="all")
        ],
        font={"color": "white"},
        bgcolor = 'black',
    ),
    rangebreaks=[
        # 周末隐藏规则添加天级dvalue(1天=86400000毫秒)
        dict(bounds=["sat", "mon"], dvalue=1000*60*60*24),
        # 盘外时间隐藏规则添加小时级dvalue(1小时=3600000毫秒)
        dict(bounds=[16, 9.5], pattern="hour", dvalue=1000*60*60),
    ],
    row=1, col=1,
)

修改后点击1d按钮时,边界处的非交易时段也会被正常隐藏,和其他时间范围的表现一致。

如果需要1d按钮直接显示当日的交易数据,也可以把1d按钮的stepmode从backward改为todate,点击时会自动从当日0点开始计算范围,同样可以避免显示非交易时段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:06:02