Как изменить формат отображения времени в секундах на дату по оси X в диаграмме Боке - PullRequest
0 голосов
/ 23 сентября 2018

Я строю две точки с текущим временем в секундах на оси X.тип оси x установлен на datetime.Время отображается как 540400US числа.

Я пытаюсь изменить формат времени на формат даты (например, 22-сен-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 голосов
/ 23 сентября 2018

Вам необходимо преобразовать столбец времени в тип datetime, используя функцию to_datetime() из pandas, иначе кажется, что bokeh не может правильно интерпретировать время.

Я думаю, что формат по оси X идет в мс, потому что у вас недостаточно длинных временных рамок в данных, чтобы форматирование имело какой-либо эффект, эти два значения находятся на расстоянии одной секунды, чтовероятно, соответствует тому, как ось даты и времени работает в боке.Например, если у вас есть данные большого диапазона (например, неделя), и вы увеличиваете масштаб графика, разрешение времени изменяется и становится более точным при увеличении. Если вы добавляете больше различий между значениями, форматирование делаетработа.

Кроме того, если вы хотите, чтобы время отображалось в формате: 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

...