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

How to use timestamp as chart's x-axis?

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

您的 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))

切勿将关键字用作变量。您正在使用 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