Боке: Не удается обновить формат всплывающей подсказки

1

Я пытаюсь обновить формат уже определенной подсказки hover, но я не вижу никаких изменений. Изменение, которое я делаю в приведенном ниже примере, изменяет ось x между числом и временной шкалой ('00: 00: 00 '). Ось X обновляется, как ожидалось. Используя версию Bokeh 0.12.16, Mac OS X, браузер Safari.

Любые намеки относительно того, что я делаю неправильно, оцениваются.

from bokeh.plotting import figure, ColumnDataSource
from bokeh.models import HoverTool, NumeralTickFormatter, AdaptiveTicker
from bokeh.models.widgets import RadioGroup
from bokeh.layouts import row, widgetbox
from bokeh.io import curdoc


def update_axis_format(new):
    if new == 0:
        format_num = '0'
        mantissas= [1,2,5]
    else:
        format_num = '00:00:00'
        mantissas=[3.6, 7.2, 18]

    p.xaxis[0].formatter = NumeralTickFormatter(format = format_num)
    p.xaxis.ticker = AdaptiveTicker(base = 10, mantissas = mantissas)
    p.xgrid.ticker = AdaptiveTicker(base = 10, mantissas = mantissas)
    p.tools[0].tooltips[2] = ("x", "@x{{{}}}".format(format_num))


source = ColumnDataSource(data=dict(
    x=[10, 2000, 10000, 40000, 50000],
    y=[2, 5, 8, 2, 7],
    desc=['A', 'b', 'C', 'd', 'E'],
))

hover = HoverTool(tooltips=[
    ("index", "$index"),
    ("desc", "@desc"),
    ("x", "@x")
])

p = figure(plot_width=400, plot_height=400, tools=[hover],
           title="Mouse over the dots")

p.circle('x', 'y', size=20, source=source)

xaxis_format = RadioGroup(
        labels=["x-axis as number", "x-axis as time"], active=0)

xaxis_format.on_click(update_axis_format)

widget = widgetbox(xaxis_format)

curdoc().add_root(row(widget,p))
Теги:
bokeh

1 ответ

0
Лучший ответ

Код BokehJS не чувствителен к "внутренним" (т.е. на месте) изменениям tooltips. Вам нужно полностью заменить значение tooltips. Например, этот упрощенный код работает так, как ожидалось:

def update_axis_format(new):
    if new == 0:
        format_num = '0'
        mantissas= [1,2,5]
    else:
        format_num = '00:00:00'
        mantissas=[3.6, 7.2, 18]

    p.xaxis[0].formatter = NumeralTickFormatter(format = format_num)
    p.xaxis.ticker = AdaptiveTicker(base = 10, mantissas = mantissas)
    p.xgrid.ticker = AdaptiveTicker(base = 10, mantissas = mantissas)

    # replace all of tooltips, not just part
    p.tools[0].tooltips = [("x", "@x{{{}}}".format(format_num))]

hover = HoverTool(tooltips=[("x", "@x")])

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню