求助: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
相关产品推荐
相关产品推荐

