如何转换timedelta类型使Plotly直方图正确显示时间轴
timedelta64类型时长数据Plotly直方图绘制方案
问题描述
- 待绘制直方图的字段为timedelta64类型的时长数据,单条数据示例:
Timedelta('0 days 00:00:44.749500') - 直接调用
px.histogram()传入原始timedelta数据时,组件无法正确识别时间语义,坐标轴会出现50T、60T这类异常标识,无法正常展示时间刻度。 - 初始存在问题的写法代码:
fig = px.histogram(x=df_TT_redux["T_delta"],color=df_TT_redux["event_source"],log_y=True)
可落地的两种转换方案
方案1:转换为ISO标准时长格式
- 效果:可实现基础的时间轴识别,展示效果部分符合预期,后续需要配合分箱、刻度参数做调优
- 实现代码:
import isodate # 批量把timedelta转ISO时长字符串 df_TT_redux["T_delta3"]=[isodate.duration_isoformat(x) for x in df_TT_redux["T_delta"]] fig = px.histogram( x=df_TT_redux["T_delta3"], color=df_TT_redux["event_source"], color_discrete_map=color_discrete_map, log_y=False, log_x=False, nbins=100 )
方案2:按固定时间单位换算为数值(稳定性最高)
- 逻辑:Plotly对数值型轴的支持最完善,不会出现时间语义解析错误的问题。将原始timedelta数据除以选定单位的Timedelta常量,得到对应单位下的数值即可,单位可根据数据的实际跨度选择:短时长选秒/分钟,长时长选小时/天。
- 实现代码(以换算为小时单位为例):
df_TT_redux["T_delta2"] = df_TT_redux["T_delta"] / pd.Timedelta("1 hour")
注意:使用该方案绘图后,需要手动配置x轴标题标注单位,例如调用
fig.update_layout(xaxis_title="事件间隔时长(小时)"),避免阅读者误解数值含义。
内容的提问来源于stack exchange,提问作者Florida Man
相关产品推荐
相关产品推荐

