我正在尝试用Bokeh创建一个图表,我有一个datetime
列表,如下所示。
我想将datetime
设置为我的x轴,但似乎Bokeh无法正确显示此图表。
有没有人有一个好的解决方案?
谢谢。
datetime = ['2017-11-23 20:56:16',
'2017-11-23 20:56:47',
'2017-11-23 21:00:56',
'2017-11-23 21:01:26']
p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend")
p.xaxis.axis_label = "time"
p.yaxis.axis_label = "price"
p.line(datetime, price, line_width=2)
output_file("test.html")
show(p)
答案 0 :(得分:0)
您的datetime
列表包含字符串,这些字符串应为datetime
个对象(或等效的Pandas等)。
(顺便说一句,为避免混淆,最好避免在变量中使用模块名称,例如datetime
。)
您可以使用datetime
模块解析它们,但Pandas也很方便,例如:
import pandas as pd
datetime = pd.to_datetime(['2017-11-23 20:56:16',
'2017-11-23 20:56:47',
'2017-11-23 21:00:56',
'2017-11-23 21:01:26'])
您可以使用DatetimeTickFormatter
调整轴标签的格式。
编辑:
如果您不想使用Pandas解析日期,可以使用datetime
模块完成,如下所示:
from datetime import datetime
dates = ['2017-11-23 20:56:16',
'2017-11-23 20:56:47',
'2017-11-23 21:00:56',
'2017-11-23 21:01:26']
dates = list(map(lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S'), dates))
答案 1 :(得分:0)
绝不要将关键字用作变量。您使用datetime
作为变量,应避免使用。时间的数据类型应始终采用接受的日期时间格式。
检查我对代码所做的更改,该代码将timestamp
显示为x轴。
注意:由于数据非常小,因此只显示当天的小时数,如果数据非常大,则会显示日期,时间和年份。
图表:
datetimes = ['2017-11-23 20:56:16',
'2017-11-23 20:56:47',
'2017-11-23 21:00:56',
'2017-11-23 21:01:26']
datetimes = np.array(datetimes, dtype=np.datetime64)
p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend")
p.xaxis.axis_label = "time"
p.yaxis.axis_label = "price"
p.line(datetimes, [45,67,70,60], line_width=2)
show(p)
我添加了一些示例数据并制作了另一个显示日期的图表。
date_range = pd.date_range('2017-11-23 00:00:00', periods=72, freq='H')
price = np.random.randint(20,100,72)
p = figure(x_axis_type="datetime", plot_width=800, plot_height=350, title="the trend")
p.xaxis.axis_label = "time"
p.yaxis.axis_label = "price"
p.line(date_range, price, line_width=2)
show(p)
图表如下:
供参考Bokeh