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

求助:Bokeh中DatetimeTickFormatter无法修改时间轴格式问题

我之前也碰到过类似的问题!大概率是你没有把自定义格式化器正确绑定到X轴,或者没覆盖对应时间尺度的格式设置。让我给你一步步说怎么解决:

首先,确保你导入了需要的模块,然后重点处理X轴的格式化逻辑:

from bokeh.models import DatetimeTickFormatter, ColumnDataSource
from bokeh.plotting import figure, show
import datetime as dt

# 模拟你的数据源(ENTRYDATE为datetime对象)
sample_dates = [dt.datetime(2017,1,15), dt.datetime(2017,2,20), dt.datetime(2017,3,5)]
source = ColumnDataSource(data=dict(ENTRYDATE=sample_dates, values=[10, 25, 18]))

# 创建图表,必须指定x_axis_type为"datetime"
p = figure(x_axis_type="datetime", title="自定义日期格式示例")
p.vbar(x='ENTRYDATE', top='values', width=0.5, source=source)

# 关键:创建自定义格式化器,覆盖所有可能用到的时间尺度
p.xaxis.formatter = DatetimeTickFormatter(
    days=["%b %d, %Y"],    # 当刻度按天展示时用此格式
    months=["%b %d, %Y"],  # 当刻度按月展示时用此格式
    years=["%b %d, %Y"]    # 当刻度按年展示时用此格式
)

show(p)

为什么要这么设置?

Bokeh会根据你的数据时间跨度自动选择合适的刻度尺度(比如数据跨几个月就可能用months尺度)。如果只设置某一种尺度的格式,实际显示时可能触发的是另一种尺度,导致你的自定义格式不生效。把days/months/years都覆盖,就能确保不管数据跨度如何,都会用你想要的Jan 15, 2017格式显示。

另外要注意:必须确保图表的x_axis_type设置为"datetime",否则Bokeh会把日期当成普通数值处理,格式化器根本不会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:38:23