如何使用时间戳作为图表的 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
我正在尝试使用 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