HoverTool на Bokeh: проблема формата времени (дата не отображается правильно), ось x от столбца даты и времени DF в пандах - PullRequest
1 голос
/ 08 июня 2019

Вот код, который я написал.Я взял данные из панд DF (здесь не наклеено).Значения x взяты из столбцов индекса DF, который является столбцом DateTime.Проблема, которую я хочу решить, находится в строке:

TOOLTIPS = [("index", "$ index"), ("(Время, температура)", "($ x, $ y)"),]

когда мне нужно изменить формат $ x на правильный формат, чтобы увидеть формат времени в окне наведения на графике боке.

см. Код питона

import datetime as dt
from bokeh.plotting import figure, output_file, show

from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource, CDSView, BooleanFilter
from bokeh.models import DatetimeTickFormatter



x=df_bases.index

y0=df_bases["base_1"]
y1=df_bases["base_5"]
y2=df_bases["base_12"]



# output to static HTML file
output_file("temperatures from thermocouples.html")



# add some renderers

output_file("Thermocouples temperature.html", title="Thermocouples temperature")

TOOLTIPS = [("index", "$index"),("(Time,Temperature)", "($x, $y)"),]


# create a new plot with a datetime axis type
p = figure( tooltips=TOOLTIPS , plot_width=1250, plot_height=580, x_axis_type="datetime", x_axis_label='Time', 
           y_axis_label='Temperature [°C]', title="Thermocouples temperature") 


p.line(x, y0, legend="thermocouple 1", line_width=1 , color='navy', alpha=1)
p.line(x, y1, legend="thermocouple 5", color="green")
p.line(x, y2, legend="thermocouple 12", line_width=1 , color='orange', alpha=1)#, line_dash="4 4")

p.border_fill_color = "whitesmoke"


p.xaxis.formatter=DatetimeTickFormatter(
    microseconds = ['%Y-%m-%d %H:%M:%S.%f'],
    milliseconds = ['%Y-%m-%d %H:%M:%S.%3N'],
    seconds = ["%Y-%m-%d %H:%M:%S"],
    minsec = ["%Y-%m-%d %H:%M:%S"],
    minutes = ["%Y-%m-%d %H:%M:%S"],
    hourmin = ["%Y-%m-%d %H:%M:%S"],
    hours=["%Y-%m-%d %H:%M:%S"],
    days=["%Y-%m-%d %H:%M:%S"],
    months=["%Y-%m-%d %H:%M:%S"],
    years=["%Y-%m-%d %H:%M:%S"],
)


p.title.align = 'center'





# create a column data source for the plots to share
source = ColumnDataSource(data=dict(x=x, y0=y0, y1=y1, y2=y2))

# create a view of the source for one plot to use
view = CDSView(source=source)




# show the results
show(p)

1 Ответ

0 голосов
/ 09 июня 2019

В настоящее время (по состоянию на Bokeh 1.2) инструмент для наведения мыши не имеет режима «всегда включен». Он только парит в ответ на тестовые символы, которые добавляются на график. Кроме того, невозможно применить форматирование к «особым переменным», таким как $x. Пользовательские средства форматирования могут применяться только к всплывающим подсказкам для столбцов данных. Учитывая это, мое лучшее предложение - вместо этого использовать @x (который опрашивает столбец данных «x», а не положение мыши x ». Если вы сделаете это, вы можете использовать все приемы в подсказке форматирования ). Поля раздел документов.

Поскольку вы не предоставили пример complete (данные для запуска отсутствуют), я могу предоставить только частичные непроверенные предложения:

# use @x{%F} to specify the %F datetime format (or choose another) for the x column
TOOLTIPS = [("index", "$index"),("(Time,Temperature)", "(@x{%F}, $y)")]

# tell bokeh to use the "datetime" formatter for the x column
p.hover.formatters = {'x': 'datetime'}

# just a suggestion, often useful for timeseries plots
p.hover.mode = 'vline'
...