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

Plotly go.Bar()中offset参数在datetime轴下失效问题咨询

Plotly go.Bar offset参数在datetime轴上失效的原因及解决方法

这不是Bug,是Plotly的设计特性:offset参数的单位是对应轴的数值单位。当x轴是数值类型时,单位就是常规数字,0.15的偏移能直观体现;但datetime轴的底层是从epoch开始的毫秒级时间戳,0.15的偏移仅相当于0.15毫秒,肉眼完全无法察觉,所以看起来像是失效了。

要在datetime轴上实现分组条形的偏移,需要手动调整每个trace的x轴datetime值,配合barmode='overlay'和合适的bar宽度来实现,具体方案如下:

修改后的可运行代码

import plotly.graph_objects as go
import datetime
from datetime import timedelta
import pandas as pd
from random import random

# 生成datetime索引
dates = pd.DatetimeIndex([datetime.date(2022,10,10) + timedelta(x) for x in range(10)]) 

fig = go.Figure()

# 定义每个trace的时间偏移量(可根据需求调整,比如小时、天)
time_offsets = [timedelta(hours=-12), timedelta(hours=0), timedelta(hours=12)]
# 设置bar宽度,单位为天,避免偏移后条形重叠
bar_width = 0.4

for i in range(3):
    s = pd.Series(
        [5*(random()-0.5) for x in range(len(dates))],
        index = dates
    )
    # 给当前trace的x轴添加时间偏移
    shifted_x = s.index + time_offsets[i]
    
    fig.add_trace(
        go.Bar(
            x = shifted_x,
            y = s,
            width=bar_width,
            name=f'分组 {i+1}'
        )
    )

# 启用overlay模式,调整x轴显示格式
fig.update_layout(
    barmode='overlay',
    xaxis=dict(
        tickformat='%Y-%m-%d',
        dtick='D1'  # 按天显示刻度
    )
)

fig.show()

关键说明

  1. 手动偏移datetime值:用timedelta给每个trace的x轴时间添加偏移量,偏移幅度可以是小时、分钟或天,根据你的分组需求调整
  2. 设置bar宽度:datetime轴的width参数单位是天,设置合适的宽度(比如0.4天)能避免偏移后的条形重叠
  3. 启用overlay模式:必须把barmode设为overlay,才能让偏移后的条形在同一x轴刻度位置叠加显示

内容的提问来源于stack exchange,提问作者the.real.gruycho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 13:33:30