有条件的工具提示散景堆积图

问题描述 投票:0回答:2

我正在尝试根据堆积图上的数据创建自定义悬停。在下面的示例中,如果用户将鼠标悬停在“ cat1”上,则应返回“ cat1_text”;相应地,“ cat2”和“ cat3”的“ cat2_text”和“ cat3_text”。

对于工具提示,由于$ name将返回'cat1','cat2'或'cat3',我以为通过添加'_text',将相应地调用该值(但当然这不是这样的方式python / bokeh作品)。我也在考虑使用任何函数/索引调用,但不太确定如何使用。好心的建议。非常感谢!

category = ['cat1', 'cat2', 'cat3']

data = {'timeVal' : [0,1,2,3,4,5],
        'cat1'   : [2, 1, 4, 3, 2, 4],
        'cat2'   : [5, 3, 4, 2, 4, 6],
        'cat3'   : [3, 2, 4, 4, 5, 3],
        'cat1_text'   : ['a','b','c','d','e','f'],
        'cat2_text'   : ['a1','b1','c1','d1','e1','f1'],
        'cat3_text'   : ['a2','b2','c2','d2','e2','f2'],
}

toolTipArr = [
    ("name", "$name"),
    ("count", "@$name"),
    ("info", '@'+'$name'+'_text}')
]

p = figure(x_range=(startTime,endTime), plot_height=250, plot_width=1000, title="project",
           toolbar_location="right", tools="hover,pan,wheel_zoom,box_zoom,reset", 
           tooltips=toolTipArr)

p.vbar_stack(category, x='timeVal', width=2, color=colors, source=data,
             legend=[value(x) for x in category])
python bar-chart bokeh stacked-chart
2个回答
0
投票
bigreddot

稍加努力,您就可以使用CustomJS回调(Bokeh v1.3.0)实现相同的效果:

from bokeh.core.properties import value
from bokeh.models import ColumnDataSource, CustomJSHover
from bokeh.plotting import figure, show

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
colors = ["#c9d9d3", "#718dbf", "#e84d60"]

data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 4, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

source = ColumnDataSource(data=data)

tooltips= [("name", "$name"), ("count", "@$name")]

p = figure(x_range=fruits, plot_height=350, title="Fruit Counts by Year",
           toolbar_location=None, tooltips=tooltips)

renderers = p.vbar_stack(years, x='fruits', width=0.9, color=colors, source=source,
                         legend=[value(x) for x in years], name=years)

p.hover[0].tooltips.append(('info', '$name{custom}'))
p.hover[0].formatters = {'$name' : CustomJSHover(code = "return special_vars.name + '_text'")}

show(p)

from bokeh.core.properties import value from bokeh.models import ColumnDataSource, HoverTool, CustomJS from bokeh.plotting import figure, show fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries'] years = ["2015", "2016", "2017"] colors = ["#c9d9d3", "#718dbf", "#e84d60"] data = {'fruits' : fruits, '2015' : [2, 1, 4, 3, 2, 4], '2016' : [5, 3, 4, 2, 4, 6], '2017' : [3, 2, 4, 4, 5, 3]} source = ColumnDataSource(data=data) p = figure(x_range=fruits, plot_height=350, title="Fruit Counts by Year", toolbar_location=None, tools="") renderers = p.vbar_stack(years, x='fruits', width=0.9, color=colors, source=source, legend=[value(x) for x in years], name=years) hover_code = "if (cb_data.index.indices.length > 0) { cb_obj.tooltips[2] = ['info', cb_obj.name + '_text'] }" for renderer in renderers: p.add_tools (HoverTool(tooltips=[("name", "$name"), ("count", "@$name"), ("info", "@info"), ], renderers=[renderer], name = renderer.name, callback = CustomJS(code = hover_code))) show(p)

© www.soinside.com 2019 - 2024. All rights reserved.