散景列数据源如何工作?

时间:2018-12-04 07:25:11

标签: python bokeh

我试图更好地了解Bokeh中的列数据源(适用于Python)。我找到了this code,但似乎找不到说明我在寻找某些东西的文档,例如:

  1. lasso_select工具的回调在哪里?我想看看在哪里描述了预期的功能。
  2. 如何在代码中描述lasso_select的功能? (如果要更改该怎么办?)
  3. 列数据源正在发生什么,以便套索选择区域之外的圆改变外观? (我想知道如何使用列数据源来进行比本演示所示的更为复杂的可视化。因此,我想知道正在操作哪个字典字段,以及如何对其进行操作。例如,是否有隐藏的“颜色”字段或类似的字段,在此代码中未明确显示?)
  4. 执行lasso_select动作时,什么代码导致人物被重画?

关于此以及CDSView,我还有很多其他问题,但是我现在就停在这里。

from bokeh.io import output_file, show
from bokeh.layouts import gridplot
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure

output_file("brushing.html")

x = list(range(-20, 21))
y0 = [abs(xx) for xx in x]
y1 = [xx**2 for xx in x]

# create a column data source for the plots to share
source = ColumnDataSource(data=dict(x=x, y0=y0, y1=y1))

TOOLS = "box_select,lasso_select,help"

# create a new plot and add a renderer
left = figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
left.circle('x', 'y0', source=source)

# create another new plot and add a renderer
right = figure(tools=TOOLS, plot_width=300, plot_height=300, title=None)
right.circle('x', 'y1', source=source)

p = gridplot([[left, right]])

show(p)

这与my previous question有关,其中唯一的答案在解释该特定问题时非常狭窄。但是,我对引擎盖下的结果给出的可见结果非常感兴趣。如果我能了解其中的一些细节,将会对我的理解有所帮助。

1 个答案:

答案 0 :(得分:3)

1)没有回调。该工具负责定义选择几何,然后根据该几何进行命中测试。命中测试结果存储在数据源的selection属性中。字形渲染器根据其数据源的selection属性绘制字形。如果两个字形渲染器(即使在不同的绘图上)共享同一数据源,则它们将绘制相同的一组选定/未选定的结果。

2)如果您是指普通对象,选定对象与未选定对象的外观,请参见此处的文档中所述的配置方法:

https://bokeh.pydata.org/en/1.0.2/docs/user_guide/styling.html#selected-and-unselected-glyphs

LassoTool对象本身也有一些属性,例如是否应该在每次mousemove上进行选择,还是仅在mouseup上进行选择,以及选择覆盖的外观。所有这些都记录在ReferenceGuide中。如果您要问如何更改实现(如Bokeh中的msot一样),则实际工作不是在Python中完成,而是在JavaScript库BokehJS中完成。 LassoTool的实现在这里:

https://github.com/bokeh/bokeh/blob/master/bokehjs/src/lib/models/tools/gestures/lasso_select_tool.ts

如果您想要一些根本不同的东西,则需要实现自己的自定义模型,包括其JavaScript组件。完整的《用户指南》部分介绍了如何构建自定义扩展:

https://bokeh.pydata.org/en/1.0.2/docs/user_guide/extensions.html

3)绘图配置有各种渲染器,其中之一可以是GlyphRenderer。 GlyphRenderer本身不会绘制任何内容,但是会配置用于绘制特定场景的各种子字形:

  • glyph绘制字形的“正常”版本(即,当数据源上没有选择内容时)
  • selected_glyph绘制字形的“选定”版本(即,处于选中状态的套索或框工具中的字形)
  • nonselected_glyph绘制“非选定”字形(例如,处于选中状态的套索或框工具外部的字形)默认情况下,非选定字形只是“正常”字形的副本Alpha值设置得很低。
  • hover_glyph绘制字形的“悬停”版本(即,当悬停工具检查了它们时)

可以通过在每种情况下使用的字形上配置属性来配置在不同情况下的外观。它们有合理的默认值,但可以按照第2个链接中的说明进行更新

4)BokehJS具有内部信号/插槽事件系统,该系统用于(除其他事项外)在各种属性发生更改时请求画布重绘。