你如何在多个地块上制作 Bokeh select 中的 RangeTool?

How do you make the RangeTool in Bokeh select over multiple plots?

参照

https://docs.bokeh.org/en/latest/docs/gallery/range_tool.html

您可以在其中使用范围工具控制主顶部图表。

你能修改这个以便你可以 select 多个图表吗?到目前为止,我尝试显示图表,但只有我与 x_range 同步的图表是移动的图表。我尝试传递一个列表,一个系列,但没有任何效果。有人可以帮忙吗?

示例代码:

import numpy as np
from bokeh.io import show
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, RangeTool
from bokeh.plotting import figure
from bokeh.sampledata.stocks import AAPL, GOOG
from bokeh.layouts import gridplot

dates = np.array(AAPL['date'], dtype=np.datetime64)
source = ColumnDataSource(data=dict(date=dates, aapl=AAPL['adj_close'], goog=GOOG['adj_close']))

p1 = figure(plot_height=300, plot_width=800, tools="xpan", toolbar_location=None,
           x_axis_type="datetime", x_axis_location="above",
           background_fill_color="#efefef", x_range=(dates[1500], dates[2500]))
p1.line('date', 'aapl', source=source)
p1.yaxis.axis_label = 'Price'

p2 = figure(plot_height=300, plot_width=800, tools="xpan", toolbar_location=None,
           x_axis_type="datetime", x_axis_location="above",
           background_fill_color="#efefef", x_range=(dates[1500], dates[2500]))
p2.line('date', 'goog', source=source)
p2.yaxis.axis_label = 'Price'

p = gridplot([[p1,p2]])

select = figure(title="Drag the middle and edges of the selection box to change the range above",
                plot_height=130, plot_width=1600, y_range=p1.y_range,
                x_axis_type="datetime", y_axis_type=None,
                tools="", toolbar_location=None, background_fill_color="#efefef")

range_tool = RangeTool(x_range=p1.x_range)
range_tool.overlay.fill_color = "navy"
range_tool.overlay.fill_alpha = 0.2

select.line('date', 'aapl', source=source)
select.line('date', 'goog', source=source)
select.ygrid.grid_line_color = None
select.add_tools(range_tool)
select.toolbar.active_multi = range_tool

show(column(p, select))

输出:

您还必须配置所有要同步的绘图,范围相同,例如

p2 = figure(..., x_range=p1.x_range)