要解决"不同线条的多个HoverTools在图上无法渲染"的问题,可以尝试以下方法:
GridPlot
或Row
、Column
等布局工具将多个图表组合在一起。然后为每个图表创建单独的HoverTool
,并将它们分别添加到对应的图表上。from bokeh.layouts import gridplot
from bokeh.plotting import figure, show
from bokeh.models import HoverTool
# 创建图表
p1 = figure(height=300, width=400, title="Plot 1")
p2 = figure(height=300, width=400, title="Plot 2")
# 添加数据和线条
# ...
# 创建HoverTools
hover_tool1 = HoverTool(tooltips=[("x", "@x"), ("y", "@y")])
hover_tool2 = HoverTool(tooltips=[("x", "@x"), ("y", "@y")])
# 将HoverTools添加到图表上
p1.add_tools(hover_tool1)
p2.add_tools(hover_tool2)
# 组合图表
layout = gridplot([[p1, p2]])
# 显示图表
show(layout)
HoverTool
,可以为每条线条创建一个独立的ColumnDataSource
,然后为每个ColumnDataSource
创建对应的HoverTool
。from bokeh.plotting import figure, show
from bokeh.models import HoverTool, ColumnDataSource
# 创建图表
p = figure(height=300, width=400, title="Plot")
# 添加数据和线条
# ...
# 创建ColumnDataSource
source1 = ColumnDataSource(data=dict(x=x1, y=y1))
source2 = ColumnDataSource(data=dict(x=x2, y=y2))
# 创建HoverTools
hover_tool1 = HoverTool(tooltips=[("x", "@x"), ("y", "@y")], renderers=[p.line(x='x', y='y', source=source1)])
hover_tool2 = HoverTool(tooltips=[("x", "@x"), ("y", "@y")], renderers=[p.line(x='x', y='y', source=source2)])
# 将HoverTools添加到图表上
p.add_tools(hover_tool1)
p.add_tools(hover_tool2)
# 显示图表
show(p)
这些方法可以让每个线条具有独立的HoverTool
,并能够在图表上正确渲染。根据实际需求选择适合的方法。