我正在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)
答案 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)