散景:无法更新悬停工具提示的格式

时间:2018-06-15 11:14:14

标签: python bokeh

我正在尝试更新已定义的悬停工具提示的格式,但我没有观察到任何更改。我在下面的示例中所做的更改是更改数字和时间刻度('00:00:00')之间的x轴。 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))

1 个答案:

答案 0 :(得分: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")])

enter image description here