如何消除plotly.express.timeline中连续相邻日期之间的间隔
问题原因
该间隔由Plotly时间线的「左闭右开」时间范围规则导致:
你通过.date()获取的日期对象对应当日00:00:00的时间戳,第一个时间段的结束时间为2010-11-05 00:00:00,第二个时间段的开始时间为2010-11-06 00:00:00,中间空出了整个11月5日的宽度,因此出现了明显间隔。
解决方案
只需将结束日期的时间调整为当日23:59:59,无需修改其他逻辑即可实现无缝衔接,且不会出现日期重叠:
- 调整日期解析逻辑,给结束日期补充当日最晚时间:
from dateutil import parser start_date_1 = parser.parse("2010-08-01") # 结束日期设置为当日23:59:59 end_date_1 = parser.parse("2010-11-05 23:59:59") start_date_2 = parser.parse("2010-11-06") end_date_2 = parser.parse("2010-11-12 23:59:59")
如果是批量处理日期,可以直接拼接时间字符串:
end_date_str = "2010-11-05" end_date_1 = parser.parse(f"{end_date_str} 23:59:59")
- 原有绘图代码无需修改,运行后即可得到无缝衔接的效果:

可选优化:统一日期显示格式
如果需要hover提示里的日期统一只显示年月日,不需要显示时间,可以添加hover_data参数自定义显示内容:
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Stack", color="Task", hover_name="Task", # 自定义hover显示的日期格式 hover_data={ "Start": "|%Y-%m-%d", "Finish": "|%Y-%m-%d" }, opacity=.7, width=1000)
内容的提问来源于stack exchange,提问作者quadratecode
相关产品推荐
相关产品推荐

