Bokeh RangeTool使用不同尺寸的图形之间的交互

时间:2018-11-16 11:42:12

标签: python bokeh

以下是RangeTool的示例:https://bokeh.pydata.org/en/latest/docs/gallery/range_tool.html,我遇到了一些问题。我想让次要图的范围工具在主图未显示的维度上刷数据(在此示例中为z),并根据次图上的选择对主图中的数据进行刷图。所以我做了以下事情:

import numpy as np
from bokeh.models import ColumnDataSource, RangeTool
from bokeh.layouts import column
from bokeh.plotting import figure, show

n = 10
x = np.random.random(n)
y = np.random.random(n)
z = np.arange(n)
source = ColumnDataSource(data=dict(x=x, y=y, z=z, xy=x+y))

plotxy = figure(plot_width=800, plot_height=800)   
plotxy.scatter('x', 'y', source=source)

plotz = figure(plot_width=800, plot_height=100)
plotz.line('z', 'xy', source=source)
range_rool = RangeTool(x_range=plotz.x_range)
plotz.add_tools(range_rool)

p = column([plotxy, plotz])
show(p)

但是,自从我得到以下信息后,RangeTool似乎与这种方法不兼容:

expected an instance of type Range1d, got DataRange1d(id='13429', ...) of type DataRange1d

在下一行:range_rool = RangeTool(x_range=plotz.x_range)。 将其更改为x_range=Range1d(z[0], z[-1])可以使所有内容正确显示,但是刷涂对主体图形没有影响。

我可以使用它代替次要人物来获得互动:

plotz = figure(plot_width=800, plot_height=100, tools='xbox_select')
plotz.scatter('t', 'xy', source=source)
plotz.line('t', 'xy', source=source)

这里的问题是BoxSelectionTool不持久且不可拖动,这是我想要的关键功能

由于在BoxSelectionTool上刷涂效果很好,因此RangeTool API是否缺少此功能,所以这是不可能的,还是我在这里使用了错误的方法? (PS。将散点图添加到辅助图形上对RangeTool无效)

有什么方法可以轻松地实现这种交互行为?谢谢。

0 个答案:

没有答案