Bokeh中的日期时间轴

时间:2017-05-03 10:46:00

标签: datetime bokeh

对于我的数字,我想在散景中使用'datetime'选项,如下所示:

top = figure(width=900, height=500, x_axis_type='datetime')

我的x轴数据采用datetime.time格式。

x_time = [datetime.time(0, 0), datetime.time(0, 0, 3), datetime.time(0, 0, 13), datetime.time(0, 0, 23), datetime.time(0, 0, 26)]

但是在尝试添加时会产生以下错误:

top.image_url(x=datetime.time(0,0,3), y= 10 url = [some_url]]

top.add_layout(Arrow(x_start=datetime.time(0,0,0), y_start=5,
            x_end=datetime.time(0,0,3), y_end=10)


ValueError: expected an element of either String, Dict(String, Either(String, Instance(Transform), Instance(ColorMapper), Float)) or Float, got datetime.time(0, 0)

根据Rutger Kassies的建议,我将数据转换为微秒,现在只显示秒数: Change from seconds to minutes

2 个答案:

答案 0 :(得分:1)

Bokeh注释似乎只采用数字,而不是DatetimeTime个对象。解决方法是将您的时间转换为微秒并使用它们进行绘图。

一个例子:

from bokeh.plotting import figure, show, output_notebook
from bokeh.models import Arrow
import datetime

def time_to_microseconds(t):
    dmin = datetime.datetime.min
    dummy_tdelta = (datetime.datetime.combine(dmin, t) - dmin)
    return dummy_tdelta.total_seconds()*1000

x_time = [datetime.time(0,0,1),
          datetime.time(0,0,2),
          datetime.time(0,0,3),
          datetime.time(0,0,4),
          datetime.time(0,0,5)]

top = figure(width=300, height=300, x_axis_type='datetime')

# a line works fine with time objects
top.line(x_time, range(len(x_time)))

# layout needs numbers
top.add_layout(Arrow(x_start=time_to_microseconds(datetime.time(0,0,2)), 
                     y_start=3,
                     x_end=time_to_microseconds(datetime.time(0,0,3)), 
                     y_end=2))

enter image description here

编辑:

您可以使用以下内容更改刻度线格式:

from bokeh.models import DatetimeTickFormatter

top.xaxis.formatter = DatetimeTickFormatter(seconds=["%M:%S"],
                                            minutes=["%M:%S"],
                                            minsec=["%M:%S"],
                                            hours=["%M:%S"])

答案 1 :(得分:0)

不确定问题的发布者使用的是哪个版本的bokeh,但是现在,如果您有一个x轴,其中的数据采用日期时间格式,则可以将其简单地声明为图形函数中的一个参数,格式将为您完成:

plot=figure(plot_height=300, plot_width=800,x_axis_type="datetime")

在此处检查示例: https://docs.bokeh.org/en/latest/docs/gallery/range_tool.html