python - 在点的精确位置显示 Bokeh 日期时间轴的标签

标签 python bokeh

我正在使用 Bokeh 的日期时间轴。在 Bokeh 数据源中,我的 x 为 numpy 日期时间格式,其他为 y 数字。我正在寻找一种方法来显示该点正下方的 x datetimx 轴的标签。我希望 Bokeh 通过数据源显示我提供的确切日期时间,而不是一些近似值!例如,我提供 5:15:00,它会在相关点之前的某个位置显示 5:00:00。我计划每 1 小时将数据流式传输到图表,并且每次都希望显示 5 个点。因此,我需要 5 个日期时间标签。我怎样才能做到这一点?我尝试了 p.yaxis[0].ticker.desired_num_ticks = 5 但没有帮助。 Bokeh 仍然显示所需数量的刻度!这是我的代码和结果:

import numpy as np
from bokeh.models.sources import ColumnDataSource
from bokeh.plotting import figure
from bokeh.io import show
from bokeh.palettes import Category10

p = figure(x_axis_type="datetime", plot_width=800, plot_height=500)

data = {'x': 
        [np.datetime64('2019-01-26T03:15:10'),
      np.datetime64('2019-01-26T04:15:10'),
      np.datetime64('2019-01-26T05:15:10'),
      np.datetime64('2019-01-26T06:15:10'),
      np.datetime64('2019-01-26T07:15:10')],
    'A': [10,25,15,55,40],
    'B': [60,50,80,65,120],}

source = ColumnDataSource(data=data)

cl = Category10[3][1:]


r11 = p.line(source=source, x='x', y='A', color=cl[0], line_width=3)
r12 = p.line(source=source, x='x', y='B', color=cl[1], line_width=3)


p.xaxis.formatter=DatetimeTickFormatter(
    seconds=["%H:%M:%S"],
    minsec=["%H:%M:%S"],
    minutes=["%H:%M:%S"],
    hourmin=["%H:%M:%S"],
    hours=["%H:%M:%S"],
    days=["%H:%M:%S"],
    months=["%H:%M:%S"],
    years=["%H:%M:%S"],
    )

p.y_range.start = -100
p.x_range.range_padding = 0.1
p.yaxis[0].ticker.desired_num_ticks = 5
p.xaxis.major_label_orientation = math.pi/2

show(p)

这是结果:

enter image description here

最佳答案

如文档中所述,num_desired_ticks 只是一个建议。如果您希望在特定位置不改变刻度,那么您可以使用 FixedTicker ,为了方便可以通过普通列表来设置:

p.xaxis.ticker = [2, 3.5, 4]

对于日期时间,您可以将值传递为自纪元以来的毫秒数。

如果您想要固定数量的刻度,但位置可能会改变(即因为范围可能会改变),那么没有内置的东西可以做到这一点。你可以做一个custom ticker extension .

关于python - 在点的精确位置显示 Bokeh 日期时间轴的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54369011/

相关文章:

python - 何时使用 bokeh-server --script <file.py>?

python - Keras TensorBoard 可视化Conv Kernels

python - 在 Python 中比较设备序列号

jupyter-notebook - 使用 reveal.js 的全息 View ( Bokeh )

python - 通过悬停在 Bokeh 中突出显示多个 hex_tiles

python - 情节和小部件安排的 Bokeh 布局

python - 在 Ubuntu Python 2.7 中读取 os.system() 命令的输出

python - 如何转换列的值列表并将其分配为 0 或 1

python - 在保持顺序的同时找到两个 NumPy 数组的交集的最快方法是什么?

coffeescript - 如何重写 Bokeh 上的方法?如何检查页面上是否已经渲染了所有元素?