如何使用时间戳作为图表的x轴?

时间:2017-11-29 13:43:46

标签: python datetime charts bokeh

我正在尝试用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)

2 个答案:

答案 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)

输出如下所示:Graph

我添加了一些示例数据并制作了另一个显示日期的图表。

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)

图表如下:

Graph2

供参考Bokeh