根据 Holoviews 下拉菜单更改工具提示值
Change tooltip values based on Holoviews dropdown
我正在尝试根据 select 在 Holoviews 下拉列表中编辑的内容动态修改我的 y-axis 刻度格式和工具提示格式。我想我可以在 finalize_hooks 中做到这一点。由于我不知道如何测试下拉列表中 selected 的内容,因此我使用标题值来确定。这似乎工作正常,但我确信可能有一个我不知道的更优雅的解决方案。此外,我可以更改刻度格式化程序,但悬停值不会根据上述方法更改。请参阅下面的示例代码。无论我 select 在哪个国家,工具提示总是显示值 1,从不显示值 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]))
条
这似乎有效
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
我正在尝试根据 select 在 Holoviews 下拉列表中编辑的内容动态修改我的 y-axis 刻度格式和工具提示格式。我想我可以在 finalize_hooks 中做到这一点。由于我不知道如何测试下拉列表中 selected 的内容,因此我使用标题值来确定。这似乎工作正常,但我确信可能有一个我不知道的更优雅的解决方案。此外,我可以更改刻度格式化程序,但悬停值不会根据上述方法更改。请参阅下面的示例代码。无论我 select 在哪个国家,工具提示总是显示值 1,从不显示值 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]))
条
这似乎有效
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