根据Holoviews下拉菜单更改工具提示值

时间:2018-10-08 14:12:29

标签: holoviews

我正在尝试根据Holoviews下拉列表中选择的内容动态修改y轴刻度格式和工具提示格式。我想我可以在finalize_hooks中做到这一点。由于我不知道如何测试下拉菜单中选择的内容,因此我使用标题值来确定。尽管我确定可能有一个我不知道的更优雅的解决方案,但这似乎可以正常工作。另外,我可以更改刻度格式,但基于上述方法,悬停值不会更改。请参见下面的示例代码。无论我选择哪个国家/地区,工具提示都始终显示Value1,而不显示Value 2。请告知是否有解决此问题的方法。

%%opts Bars [show_grid=True width=1400 height=400 xrotation=0] {+framewise}
macro_df = pd.read_csv('http://assets.holoviews.org/macro.csv', '\t')

key_dimensions   = [('year', 'Year'), ('country', 'Country')]
value_dimensions = [('unem', 'Unemployment'), ('capmob', 'Capital Mobility'),
                ('gdp', 'GDP Growth'), ('trade', 'Trade')]
macro = hv.Table(macro_df, key_dimensions, value_dimensions)

hover = HoverTool(tooltips=[('year', '@year'),
                        ('Value', '@unem{0.000%}')])

def apply_formatter(plot, element):
    p = plot.handles['plot']
    if 'Austria' in p.title.text:
        plot.handles['yaxis'].formatter = NumeralTickFormatter(format="0")
        p.hover[0].tooltips[1] = ('Value1', '@unem{0.0%}')
    else:
        plot.handles['yaxis'].formatter = NumeralTickFormatter(format="0.0%")
        p.hover[0].tooltips[1] = ('Value2', '@unem{0.00%}')

bars = macro.to(hv.Bars, kdims='year', vdims=['unem']).opts(plot=dict(tools=[hover], finalize_hooks=[apply_formatter]))

酒吧

1 个答案:

答案 0 :(得分:0)

这似乎可行

from bokeh.models import NumeralTickFormatter
from bokeh.models import HoverTool
macro_df = pd.read_csv('http://assets.holoviews.org/macro.csv', '\t')

key_dimensions   = [('year', 'Year'), ('country', 'Country')]
value_dimensions = [('unem', 'Unemployment'), ('capmob', 'Capital Mobility'),
                ('gdp', 'GDP Growth'), ('trade', 'Trade')]
macro = hv.Table(macro_df, key_dimensions, value_dimensions)


def apply_formatter(plot, element):
    p = plot.state
    global x
    x = p
    if 'Austria' in p.title.text:
        plot.handles['yaxis'].formatter = NumeralTickFormatter(format="0")
        hover = HoverTool(tooltips=[('year', '@year'),
                                    ('Value', '@unem{0%}')])
        p.tools = [hover]
    else:
        plot.handles['yaxis'].formatter = NumeralTickFormatter(format="0.0%")
        hover = HoverTool(tooltips=[('year', '@year'),
                                ('Value', '@unem{0.00%}')])
        p.tools = [hover]

bars = macro.to(hv.Bars, kdims='year', vdims=['unem']).options(
    tools=[], finalize_hooks=[apply_formatter])
bars

Austria Format Belgium Format