我有以下代码来绘制堆积条形图。如何正确处理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])
答案 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]
你可以在你的轴上绘图。 (或者你也可以使用几分钟或几小时。
干杯, 塞巴斯蒂安