在Bokeh中获取日期时间x轴的正确间隔

时间:2018-02-01 08:53:09

标签: python plot bokeh

我有以下代码来绘制堆积条形图。如何正确处理dates列表中的日期时间格式并使用x轴来获得与线性时间对应的x-tick之间的间距?

dates = ['2018-01-25 13:04:59',
 '2018-01-26 06:16:23',
 '2018-01-26 11:03:12',
 '2018-01-26 14:10:33']

animals = ["pig", "cow", "ape"]

colors = ["#c9d9d3", "#718dbf", "#e84d60"]

data = {'dates' : dates,
        'pig'   : [2, 1, 4, 3],
        'cow'   : [5, 3, 4, 2],
        'ape'   : [3, 2, 4, 4]}

source = ColumnDataSource(data=data)

p = figure(x_range=dates, plot_height=350)

p.vbar_stack(animals, x='dates', width=0.9, color=colors, source=source,
             legend=[value(x) for x in animals])

1 个答案:

答案 0 :(得分:0)

Hoi,

如果我理解正确,这实际上并不是很难实现:

您需要做的第一件事是将时间戳转换为可以绘制的内容,因此第一个时间戳可以是0,下一个时间戳应该是自那时起的秒数,依此类推。为此,您可以将其转换为日期时间以在Python中使用:

import datetime
def conv_time(time):
   return(datetime.datetime.strptime(time , '%Y-%m-%d %H:%M:%S'))

有了这个,您可以将您的时间列表转换为日期时间:

dates = ['2018-01-25 13:04:59', '2018-01-26 06:16:23',
         '2018-01-26 11:03:12', '2018-01-26 14:10:33']
dates = [conv_time(i) for i in dates]

并计算自第一个时间戳以来的秒数:

dates = [conv_time(i) for i in dates]
start = dates[0]
seconds = [(i - start).total_seconds() for i in dates]

导致:

[0.0, 61884.0, 79093.0, 90334.0]

你可以在你的轴上绘图。 (或者你也可以使用几分钟或几小时。

干杯, 塞巴斯蒂安