如何在散景图中的X轴上将以秒为单位的时间显示格式更改为日期

时间:2018-09-23 06:00:59

标签: bokeh

我正在X轴上以秒为单位绘制当前时间的两个点。 x轴类型设置为datetime。时间以540400US号显示。

我正在尝试将时间格式更改为日期格式(例如22-Sep-18 02:22:22)。使用DatetimeTickFormatter尝试设置格式,但未更改显示格式。

from bokeh.plotting import figure, show, output_file
from bokeh.models.formatters import DatetimeTickFormatter
import pandas as pd
import time as time_
from datetime import datetime

def currentTime():
    return int(round(time_.time()))
data = {'size': [1,2],'time':[currentTime(),currentTime()+1]}

df = pd.DataFrame(data=data)
p = figure(title = "TEST",x_axis_type='datetime')
p.xaxis.axis_label = 'time'
p.xaxis.formatter = DatetimeTickFormatter(seconds=["%M:%S"],minutes=["%M:%S"],minsec=["%M:%S"],hours=["%M:%S"])

#p.scatter(pd.to_datetime(df["time"],unit='s'),df["size"],fill_color="olive",size=10)
p.scatter(df["time"],df["size"],fill_color="olive",size=10)
output_file("test.html", title="test chart")
show(p)

enter image description here

1 个答案:

答案 0 :(得分:1)

您需要使用to_datetime()中的pandas函数将时间列转换为日期时间类型,否则散景似乎无法正确解释时间。

我认为x轴上的格式是以毫秒为单位的,因为您在数据中没有足够长的时间框架来使格式不起作用,两个值相隔仅一秒,这可能是一致的以datetime轴在bokeh中工作的方式。例如,如果您有远程数据(例如一周),并且放大了绘图,则时间分辨率会随着放大而改变并变得更加精确。如果在两个值之间添加更多的差异,则格式会工作。

此外,如果您希望时间以22-Sep-18 02:22:22格式显示,则需要这样设置刻度线格式:

p.xaxis.formatter = DatetimeTickFormatter(days="%d-%b-%Y", hours="%H:%M", seconds="%S" )

完整代码:

from bokeh.plotting import figure, show, output_file
from bokeh.models.formatters import DatetimeTickFormatter
import pandas as pd
import time as time_
from datetime import datetime

def currentTime():
    return int(round(time_.time()))
data = {'size': [1,2],'time':[currentTime(), currentTime() + 24 * 3600]}


df = pd.DataFrame(data=data)
df['time'] = pd.to_datetime(df['time'], unit='s')
p = figure(title = "TEST",x_axis_type='datetime')
p.xaxis.axis_label = 'time'
p.xaxis.formatter = DatetimeTickFormatter(days="%d-%b-%Y %H:%M:%S")
p.scatter(df["time"],df["size"],fill_color="olive",size=10)
output_file("test.html", title="test chart")
show(p)

enter image description here