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()
关键说明
- 手动偏移datetime值:用
timedelta给每个trace的x轴时间添加偏移量,偏移幅度可以是小时、分钟或天,根据你的分组需求调整 - 设置bar宽度:datetime轴的
width参数单位是天,设置合适的宽度(比如0.4天)能避免偏移后的条形重叠 - 启用overlay模式:必须把
barmode设为overlay,才能让偏移后的条形在同一x轴刻度位置叠加显示
内容的提问来源于stack exchange,提问作者the.real.gruycho
相关产品推荐
相关产品推荐

