使用日期时间时,bokeh hbar_stack无法正确呈现

时间:2020-07-12 20:15:35

标签: python-3.x django bokeh

我正在尝试在x轴上绘制日期时间为hbar_stack的应用,但没有运气。我之前用日期时间完成了正常的hbar绘图,没有任何问题,因此hbar_stack一定有用。 这是带有一些静态数据的代码:

start_date = datetime.datetime(2020, 7, 10, 10, 26, 15, 240666)
end_date = datetime.datetime(2020, 7, 10, 13, 27, 33, 741238)
tasks = ['task 1', 'task 2', 'task 3', 'task 4']
status = ['status_1', 'status_2', 'status_3', 'status_4']
exports = {'tasks': tasks, 'status_1': [datetime.datetime(2020, 7, 10, 13, 26, 59, 531234),
                                        datetime.datetime(2020, 7, 10, 13, 25, 16, 666837),
                                        datetime.datetime(2020, 7, 10, 10, 37, 16, 368927),
                                        datetime.datetime(2020, 7, 10, 10, 26, 15, 240666)],
           'status_2': [None, datetime.datetime(2020, 7, 10, 13, 27, 33, 741238),
                        datetime.datetime(2020, 7, 10, 11, 37, 7, 629667),
                        datetime.datetime(2020, 7, 10, 10, 27, 5, 540767)],
           'status_3': [None, None, None, datetime.datetime(2020, 7, 10, 10, 54, 17, 738024)],
           'status_4': [None, None, None, datetime.datetime(2020, 7, 10, 11, 2, 15, 196620)]}

p = figure(y_range=tasks, x_range=[start_date, end_date], x_axis_type='datetime', title="Tasks timeline",
          tools=["hover,pan,reset,save,wheel_zoom"], tooltips=None)
p.xaxis.formatter = DatetimeTickFormatter(
    days=["%m-%d-%Y"],
    months=["%m-%d-%Y"],
    years=["%m-%d-%Y"],
)
p.xaxis.major_label_orientation = radians(30)
p.hbar_stack(status, y='tasks', height=0.2, color=Spectral[11][:len(status)], source=ColumnDataSource(exports))

从数据中可以看到,日期时间相隔数分钟,但呈现的时间却有所不同。将鼠标悬停在data(x,y)上时,x值不显示日期,而是显示一个大数字,例如1.589e + 12。任何帮助表示赞赏。

enter image description here

1 个答案:

答案 0 :(得分:0)

dts = [
    datetime(2020, 7, 10, 13, 26, 59, 531234),
    datetime(2020, 7, 10, 13, 25, 16, 666837),
    datetime(2020, 7, 10, 10, 37, 16, 368927),
    datetime(2020, 7, 10, 10, 26, 15, 240666)
]

# because the datetimes are in reverse order
ends = dts[0:-1]
starts = dts[1:]

p = figure(plot_height=350, x_axis_type="datetime", y_range=["a", "b", "c"])
p.hbar(y=["b", "b", "b"], left=starts, right=ends, 
       line_color="white", fill_color=["red", "blue", "orange"])
p.xaxis.formatter.hours = ["%b %Y %H:%M"]

show(p)

产生:

enter image description here