如何修改 DateTimeTickFormatter 类?

问题描述

import pandas as pd
from math import pi
from datetime import datetime as dt
from bokeh.io import show
from bokeh.models import DatetimeTickFormatter
from bokeh.plotting import figure

d = {'col1': [dt(2015,1,1),dt(2015,2),3)],'col2': [100,200,300]}
df = pd.DataFrame(data=d)
p = figure(plot_width=400,plot_height=400)
p.line(df.col1,df.col2)
p.xaxis.formatter = DatetimeTickFormatter(days=f"%m/%d %H:%M",months="%m/%d %H:%M",hours="%m/%d %H:%M",minutes="%m/%d %H:%M:%s",minsec="%m/%d %H:%M:%s",seconds="%m/%d %H:%M:%s")

p.xaxis.major_label_orientation = pi/4
show(p)

我想修改日期时间代码类以允许刻度标签中的附加数据。例如,每当散景放置刻度标签(例如“1/01 00:00 - 100”或“1/01 12:00”)时,我都希望在“col2”中看到相应的数据。第二个示例没有添加数据,因为它不是源中的一个点。对于第二个例子,插值也是可以接受的,因为实际数据集中的数据频率很高。

解决方法

Bokeh 实际上是两个独立的库:

  • 散焦 Python 包

  • 一个 JavaScript 库 BokehJS

作为一个网络绘图工具,Bokeh 的 Python 部分实际上只是一个非常薄的包装器,用于驱动浏览器中的 BokehJS 组件。实现的所有实际工作都在 BokehJS 中(用 TypeScript 编写)。因此,通常不可能对 Bokeh 进行纯 Python 更改或编辑或子类,这会产生很大或任何影响。

可以通过提供您自己的新 Bokeh 对象子类的 Javascript 实现来创建 custom extensions to Bokeh。实际上,该文档页面底部有一个 custom tick formatter 的具体示例。 SO 不是代码编写站点或服务,但如果您尝试创建自己的自定义扩展并遇到困难,您可以提供您尝试的完整代码,并询问有关如何修复现有代码的具体、尖锐的问题。