配置打印工具

Bokeh附带了许多交互式工具,可用于报告信息、更改打印参数(如缩放级别或范围范围)或添加、编辑或删除图示符。工具可分为四个基本类别:

手势

这些工具可以响应单个手势,例如平移运动。手势工具的类型有:

对于每种类型的手势,一个工具可以在任何给定的时间处于活动状态,并且激活的工具在工具栏上通过工具图标旁边的高亮显示来指示。

行动

这些是即时或模式操作,只有在按下工具栏中的按钮时才会激活,例如 ResetTool .

检查员

这些是被动工具,以某种方式报告信息或注释绘图,例如 HoverToolCrosshairTool .

编辑工具

这些是复杂的多手势工具,可以添加、删除或修改绘图上的字形。由于编辑工具可能一次对多个手势做出响应,因此当激活编辑工具时,它可能会同时停用多个单一手势工具。

除了有关所有单个工具的信息外,本章还介绍如何配置工具栏。

定位工具栏

默认情况下,Bokeh绘图在绘图上方有一个工具栏。在本节中,您将学习如何为工具栏指定不同的位置,或如何完全删除它。

工具栏位置可以通过传递 toolbar_location 参数 figure() 功能。有效值:

  • "above"

  • "below"

  • "left"

  • "right"

如果要完全隐藏工具栏,请通过 None .

下面是一些代码,用于将工具栏定位在绘图下方。尝试运行代码并更改 toolbar_location 价值。

from bokeh.plotting import figure, output_file, show

output_file("toolbar.html")

# create a new plot with the toolbar below
p = figure(plot_width=400, plot_height=400,
           title=None, toolbar_location="below")

p.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=10)

show(p)

请注意,工具栏位置与默认轴冲突,在本例中,设置 toolbar_sticky 选择权 False 将工具栏移到绘制轴的区域之外。

from bokeh.plotting import figure, output_file, show

output_file("toolbar.html")

# create a new plot with the toolbar below
p = figure(plot_width=400, plot_height=400,
           title=None, toolbar_location="below",
           toolbar_sticky=False)

p.circle([1, 2, 3, 4, 5], [2, 5, 8, 2, 7], size=10)

show(p)

指定工具

最低的 bokeh.models 级别,工具被添加到 Plot 通过传递的实例 Tool 对象到 add_tools 方法:

plot = Plot()
plot.add_tools(LassoSelectTool())
plot.add_tools(WheelZoomTool())

这种添加工具的显式方法适用于任何Bokeh PlotPlot 子类,例如 Figure .

通过传递 tools 参数 figure() 功能。tools参数接受工具对象的列表,例如:

tools = [BoxZoomTool(), ResetTool()]

还可以使用逗号分隔的字符串(包含工具快捷方式名称)方便地提供工具:

tools = "pan,wheel_zoom,box_zoom,reset"

但是,此方法不允许设置工具的属性。

最后,通过将工具对象传递给 add_tools 情节的方法。这也可以与 tools 上述关键字:

from bokeh.models import BoxSelectTool

plot = figure(tools="pan,wheel_zoom,box_zoom,reset")
plot.add_tools(BoxSelectTool(dimensions="width"))

设置激活刀具

Bokeh工具栏可以(最多)从每种手势(拖动、滚动、点击)中有一个活动工具。默认情况下,Bokeh将使用默认的预定义优先顺序从配置的工具集中选择每种工具中的一种激活。

但是,可以控制哪个刀具处于激活状态。最低的 bokeh.models 级别,这是通过使用 active_dragactive_inspectactive_scrollactive_tap 性质 Toolbar . 这些属性可以采用以下值:

  • None ---没有这种有效的工具

  • "auto" ---Bokeh选择这类工具激活(可能没有)

  • Tool 实例---Bokeh将给定的刀具设置为激活刀具

另外, active_inspect 工具可以接受:*一系列 Tool 要设置为活动工具的实例

例如:

# configure so that no drag tools are active
plot.toolbar.active_drag = None

# configure so that Bokeh chooses what (if any) scroll tool is active
plot.toolbar.active_scroll = "auto"

# configure so that a specific PolySelect tap tool is active
plot.toolbar.active_tap = poly_select

# configure so that a sequence of specific inspect tools are active
# note: this only works for inspect tools
plot.toolbar.active_inspect = [hover_tool, crosshair_tool]

所有这些属性的默认值为 "auto" .

通过将这些属性作为关键字参数传递给 figure() 功能。也可以传递任意一个字符串名称,以便于配置:

# configures the lasso tool to be active
plot = figure(tools="pan,lasso_select,box_select", active_drag="lasso_select")

平移/拖动工具

这些工具可以通过平移(在触摸设备上)或左拖动(在鼠标设备上)来使用。一次只能激活一个平移/拖动工具。在适用的情况下,平移/拖动工具将考虑范围上设置的任何最大和最小值。

BoxSelectTool

  • 姓名: 'box_select'

  • 偶像: box_select_icon

框选择工具允许用户通过左键拖动鼠标或在绘图区域中拖动手指来定义矩形选择区域。通过设置 dimensions 属性到 widthheight 而不是默认值 both .

选择后,所选点的索引可从上的属性中获取 Selection 对象作为字形数据源。例如:

source.selected.indices

将在“散布”类型图示符的常见情况下保存选定的索引。

注解

要进行多重选择,请按SHIFT键。要清除选择,请按ESC键。

BoxZoomTool

  • 姓名: 'box_zoom'

  • 偶像: box_zoom_icon

“框缩放”工具允许用户定义矩形区域,以将打印边界缩放到。这是通过向左拖动鼠标或拖动手指穿过绘图区域来完成的。

LassoSelectTool

  • 姓名: 'lasso_select'

  • 偶像: lasso_select_icon

套索选择工具允许用户通过左键拖动鼠标或在绘图区域拖动手指来定义选择的任意区域。

选择后,所选点的索引可从上的属性中获取 Selection 对象作为字形数据源。例如:

source.selected.indices

将在“散布”类型图示符的常见情况下保存选定的索引。

注解

要进行多重选择,请按SHIFT键。要清除选择,请按ESC键。

PanTool

  • 姓名: 'pan''xpan''ypan'

  • 偶像: pan_icon

“平移”工具允许用户通过在绘图区域左拖动鼠标或拖动手指来平移绘图。

还可以通过设置 dimensions 属性添加到包含 widthheight . 此外,还有工具别名 'xpan''ypan' ,分别。

单击/点击工具

这些工具可以通过轻击(在触摸设备上)或左键单击(在鼠标设备上)来使用。一次只能激活一个单击/点击工具。

PolySelectTool

  • 姓名: 'poly_select'

  • 偶像: poly_select_icon

多边形选择工具允许用户通过左键单击鼠标或在不同位置轻触手指来定义任意多边形区域供选择。

选择后,所选点的索引可从上的属性中获取 Selection 对象作为字形数据源。例如:

source.selected.indices

将在“散布”类型图示符的常见情况下保存选定的索引。

注解

通过左键双击或点击完成选择。要进行多重选择,请按SHIFT键。要清除选择,请按ESC键。

TapTool

  • 姓名: 'tap'

  • 偶像: tap_icon

点击选择工具允许用户通过单击鼠标左键或用手指轻触在单个点进行选择。

选择后,所选点的索引可从上的属性中获取 Selection 对象作为字形数据源。例如:

source.selected.indices

将在“散布”类型图示符的常见情况下保存选定的索引。

注解

要进行多重选择,请按SHIFT键。要清除选择,请按ESC键。

滚动/挤压工具

这些工具是通过捏(在触摸设备上)或滚动(在鼠标设备上)来使用的。一次只能激活一个滚动/挤压工具。

WheelZoomTool

  • 姓名: 'wheel_zoom''xwheel_zoom''ywheel_zoom'

  • 偶像: wheel_zoom_icon

滚轮缩放工具将以当前鼠标位置为中心放大和缩小绘图。它将尊重任何最小值和最大值以及范围,防止放大和缩小超出这些值。

也可以通过设置 dimensions 属性添加到包含 widthheight . 此外,还有工具别名 'xwheel_zoom''ywheel_zoom' ,分别。

WheelPanTool

  • 姓名: 'xwheel_pan''ywheel_pan'

  • 偶像: wheel_pan_icon

滚轮平移工具将沿指定的尺寸平移打印窗口,而不更改窗口的纵横比。该工具将考虑任何最小值和最大值以及范围,防止平移超出这些值。

行动

操作是只有在点击或单击工具栏中的按钮时才会激活的操作。他们通常是情态的或直接的行动。

UndoTool

  • 姓名: 'undo'

  • 偶像: undo_icon

撤消工具允许恢复绘图的先前状态。

RedoTool

  • 姓名: 'redo'

  • 偶像: redo_icon

“重做”工具将反转“撤消”工具执行的上一个操作。

ResetTool

  • 姓名: 'reset'

  • 偶像: reset_icon

重置工具会将绘图范围恢复为其原始值。

SaveTool

  • 姓名: 'save'

  • 偶像: save_icon

保存工具弹出一个模式对话框,允许用户保存绘图的PNG图像。

ZoomInTool

  • 姓名: 'zoom_in''xzoom_in''yzoom_in'

  • 偶像: zoom_in_icon

放大工具将增加绘图的缩放。它将尊重任何最小值和最大值和范围,防止放大和缩小超出这些值和范围。

也可以通过设置 dimensions 属性添加到包含 widthheight . 此外,还有工具别名 'xzoom_in''yzoom_in' ,分别。

ZoomOutTool

  • 姓名: 'zoom_out''xzoom_out''yzoom_out'

  • 偶像: zoom_out_icon

缩小工具将降低绘图的缩放级别。它将尊重任何最小值和最大值以及范围,防止放大和缩小超出这些值。

也可以通过设置 dimensions 属性添加到包含 widthheight . 此外,还有工具别名 'xzoom_in''yzoom_in' ,分别。

检查员

检查器是被动工具,根据当前光标位置注释或报告有关绘图的信息。在任何给定的时间,任何数量的检查员都可能是活跃的。工具栏中的inspectors菜单允许用户切换任何检查器的活动状态。

CrosshairTool

  • 姓名: 'crosshair'

  • 菜单图标: crosshair_icon

十字线工具在绘图上以当前鼠标位置为中心绘制十字线注释。可以通过设置 dimensions 属性设置为枚举值之一 widthheightboth .

HoverTool

  • 姓名: 'hover'

  • 菜单图标: hover_icon

悬停工具是一个被动的检查器工具。它通常始终处于启用状态,但可以在与工具栏关联的检查器菜单中进行配置。

基本工具提示

默认情况下,悬停工具将生成一个“表格”工具提示,其中每行包含一个标签及其关联值。标签和值以列表形式提供 (标签,值) 元组。例如,下面左侧的工具提示是使用 tooltips 右边的定义。

hover_basic

hover.tooltips = [
    ("index", "$index"),
    ("(x,y)", "($x, $y)"),
    ("radius", "@radius"),
    ("fill color", "$color[hex, swatch]:fill_color"),
    ("foo", "@foo"),
    ("bar", "@bar"),
]

以开头的字段名 $ 是“特殊领域”。这些值通常对应于绘图固有的值,例如鼠标在数据或屏幕空间中的坐标。以下列出了这些特殊字段:

$index

数据源中选定点的索引

$name

价值观 name 悬停字形渲染器的属性

$x

数据空间中光标下的x坐标

$y

数据空间中光标下的y坐标

$sx

屏幕(画布)空间中光标下的x坐标

$sy

屏幕(画布)空间中光标下的y坐标

$color

来自数据源的颜色,语法为: $color[options]:field_name . 可用选项包括: hex (以十六进制值显示颜色),以及 swatch 同时显示小色板。

以开头的字段名 @ 与中的列关联 ColumnDataSource . 例如,字段名 "@price" 将显示 "price" 无论何时触发悬停。如果悬停是针对第17个字形,则悬停工具提示将相应地显示第17个价格值。

注意,如果一个列名包含空格,它必须用大括号括起来。 @{{adjusted close}} 将显示名为的列中的值 "adjusted close" .

有时(尤其是对于堆积图),允许间接指定列的名称是可取的。字段名称 @$name 区别在于它会查找 name 字段,并将该值用作列名。例如,如果用户使用名称悬停 "US East" 然后 @$name 等于 @{{US East}} .

下面是一个完整的示例,演示如何通过设置 tooltips 参数 figure

from bokeh.plotting import ColumnDataSource, figure, output_file, show

output_file("toolbar.html")

source = ColumnDataSource(data=dict(
    x=[1, 2, 3, 4, 5],
    y=[2, 5, 8, 2, 7],
    desc=['A', 'b', 'C', 'd', 'E'],
))

TOOLTIPS = [
    ("index", "$index"),
    ("(x,y)", "($x, $y)"),
    ("desc", "@desc"),
]

p = figure(plot_width=400, plot_height=400, tooltips=TOOLTIPS,
           title="Mouse over the dots")

p.circle('x', 'y', size=20, source=source)

show(p)

命中测试行为

悬停工具显示与单个图示符关联的信息性工具提示。这些工具提示可以配置为使用 mode 财产:

"mouse"

只有当鼠标直接位于字形上时

"vline"

当鼠标位置的垂直线与字形相交时

"hline"

当鼠标位置的水平线与字形相交时

默认配置为 mode = "mouse" . 这可以在 基本工具提示 上面的例子。下面的示例 设置工具提示字段格式 演示一个设置 mode = "vline" .

设置工具提示字段格式

默认情况下,字段的值(例如。 @foo )以基本数字格式显示。但是,可以更精确地控制值的格式。可以通过将指定的格式附加到大括号的末尾来修改字段。下面是一些例子。

"@foo{0,0.000}"    # formats 10000.1234 as: 10,000.123

"@foo{(.00)}"      # formats -10000.1234 as: (10000.123)

"@foo{($ 0.00 a)}" # formats 1230974 as: $ 1.23 m

上面的示例都使用默认格式设置。但是还可以指定其他格式方案来解释格式字符串:

"numeral"

为数字、货币、字节、时间和百分比提供多种格式。完整的格式集可以在 NumeralTickFormatter 参考文件。

"datetime"

提供日期和时间值的格式。完整的格式集列在 DatetimeTickFormatter 参考文件。

"printf"

提供类似于C样式“printf”类型说明符的格式。见 PrintfTickFormatter 有关完整细节的参考文档。

通过配置 formatters 悬停工具的属性。此属性将工具提示变量映射到格式方案。例如,使用 "datetime" 列格式设置方案 "@{{close date}}" ,设置值:

hover_tool.formatters = { "@{close date}": "datetime"}

也可以为“特殊变量”提供格式化程序,例如 "$x"

hover_tool.formatters = { "$x": "datetime"}

如果没有为列名指定格式化程序,则默认 "numeral" 假定为格式化程序。

请注意,格式规范也与具有空格的列名兼容。例如, @{{adjusted close}}{{($ 0.00 a)}} 将格式应用于名为“adjusted close”的列。

下面的示例代码显示显式地配置 HoverTool 对于不同字段使用不同的格式化程序:

HoverTool(
    tooltips=[
        ( 'date',   '@date{%F}'            ),
        ( 'close',  '$@{adj close}{%0.2f}' ), # use @{ } for field names with spaces
        ( 'volume', '@volume{0.00 a}'      ),
    ],

    formatters={
        '@date'        : 'datetime', # use 'datetime' formatter for '@date' field
        '@{adj close}' : 'printf',   # use 'printf' formatter for '@{adj close}' field
                                     # use default 'numeral' formatter for other fields
    },

    # display a tooltip whenever the cursor is vertically in line with a glyph
    mode='vline'
)

将鼠标悬停在下面的绘图上,可以看到此配置生成的输出:

使用 CustomJSHover 模型中,还可以使用JavaScript指定一个自定义格式设置器,该格式设置器可以在工具提示中显示派生量。

图像悬停

悬停工具可用于检查图像字形,其中可能包含对应的数据层 ColumnDataSource

import numpy as np

from bokeh.plotting import figure, output_file, show

output_file("tools_hover_tooltip_image.html")

ramp = np.array([np.linspace(0, 10, 200)]*20)
steps = np.array([np.linspace(0, 10, 10)]*20)
bitmask = np.random.rand(25, 10) > 0.5

data = dict(image=[ramp, steps, bitmask],
            squared=[ramp**2, steps**2, bitmask**2],
            pattern=['smooth ramp', 'steps', 'bitmask'],
            x=[0, 0, 25],
            y=[5, 20, 5],
            dw=[20,  20, 10],
            dh=[10,  10, 25])

TOOLTIPS = [
    ('name', "$name"),
    ('index', "$index"),
    ('pattern', '@pattern'),
    ("x", "$x"),
    ("y", "$y"),
    ("value", "@image"),
    ('squared', '@squared')
]

p = figure(x_range=(0, 35), y_range=(0, 35), tools='hover,wheel_zoom', tooltips=TOOLTIPS)
p.image(source=data, image='image', x='x', y='y', dw='dw', dh='dh', palette="Inferno256", name="Image Glyph")

show(p)

在本例中,定义了三种图像模式,分别命名为 rampstepsbitmask . 悬停工具提示显示图像的索引、图案的名称和 xy 光标的位置,以及相应的值和平方值。

自定义工具提示

也可以为工具提示提供自定义HTML模板。为此,传递一个HTML字符串,并在需要替换的地方使用Bokeh工具提示字段名符号。以上关于格式等的所有信息仍然适用。请注意,您还可以使用 {{safe}} 在列名后设置格式以禁用数据源中HTML的转义。示例如下:

from bokeh.plotting import ColumnDataSource, figure, output_file, show

output_file("toolbar.html")

source = ColumnDataSource(data=dict(
    x=[1, 2, 3, 4, 5],
    y=[2, 5, 8, 2, 7],
    desc=['A', 'b', 'C', 'd', 'E'],
    imgs=[
        'https://docs.bokeh.org/static/snake.jpg',
        'https://docs.bokeh.org/static/snake2.png',
        'https://docs.bokeh.org/static/snake3D.png',
        'https://docs.bokeh.org/static/snake4_TheRevenge.png',
        'https://docs.bokeh.org/static/snakebite.jpg'
    ],
    fonts=[
        '<i>italics</i>',
        '<pre>pre</pre>',
        '<b>bold</b>',
        '<small>small</small>',
        '<del>del</del>'
    ]
))

TOOLTIPS = """
    <div>
        <div>
            <img
                src="@imgs" height="42" alt="@imgs" width="42"
                style="float: left; margin: 0px 15px 15px 0px;"
                border="2"
            ></img>
        </div>
        <div>
            <span style="font-size: 17px; font-weight: bold;">@desc</span>
            <span style="font-size: 15px; color: #966;">[$index]</span>
        </div>
        <div>
            <span>@fonts{safe}</span>
        </div>
        <div>
            <span style="font-size: 15px;">Location</span>
            <span style="font-size: 10px; color: #696;">($x, $y)</span>
        </div>
    </div>
"""

p = figure(plot_width=400, plot_height=400, tooltips=TOOLTIPS,
           title="Mouse over the dots")

p.circle('x', 'y', size=20, source=source)

show(p)

编辑工具

编辑工具通过添加、修改和删除,在客户端提供绘制和编辑glyphs的功能 ColumnDataSource 数据。

所有编辑工具共享少量密钥绑定:

SHIFT

添加到选择或开始绘图的修改键

BACKSPACE

删除选定的图示符

ESC

清除所选内容

注解

在MacBooks和其他一些键盘上,BACKSPACE键的标签是“删除”。

BoxEditTool

  • 姓名: 'box_edit'

  • 菜单图标: box_edit_icon

BoxEditTool允许绘制、拖动和删除 Rect 在一个或多个渲染器上通过编辑底层 ColumnDataSource 数据。与其他图形工具一样,要编辑的渲染器必须作为列表显式提供:

r1 = p.rect('x', 'y', 'width', 'height', source=source)
r2 = p.rect('x', 'y', 'width', 'height', source=source2)
tool = BoxEditTool(renderers=[r1, r2])

该工具将自动修改数据源上与 xywidthheight 字形的值。数据源中的任何其他列都将使用声明的 empty_value ,添加新框时。绘制新框时,数据将始终添加到 ColumnDataSource 在第一个提供的渲染器上。

限制可绘制的元素数量通常也很有用,例如,在指定特定数量的感兴趣区域时。使用 num_objects 属性,我们可以确保一旦达到限制,将从队列中弹出最旧的框,为正在添加的新框腾出空间。

Animation showing box draw, select and delete actions

上面的动画显示了支持的工具操作,通过显示按下的键来突出显示鼠标操作(在光标周围加一个圆圈)和按键笔划。这个 BoxEditTool 可以 AddMove删除 绘图框:

添加框

按住shift键,然后单击并拖动绘图上的任何位置,或者双击一次以开始绘制,移动鼠标并再次双击以完成绘制。

移动方框

单击并拖动现有框。一旦你松开鼠标按钮,盒子就会掉下来。

删除框

单击一个框以选中它,然后在鼠标处于绘图区域内时按BACKSPACE键。

Move删除 一次多个箱子:

移动所选内容

使用SHIFT+tap(或其他选择工具)选择框,然后拖动绘图上的任何位置。选择并拖动特定的框将同时移动这两个框。

删除所选内容

使用SHIFT+tap(或其他选择工具)选择框,然后在鼠标位于绘图区域内时按BACKSPACE键。

FreehandDrawTool

  • 姓名: 'freehand_draw'

  • 菜单图标: freehand_draw_icon

这个 FreehandDrawTool 允许使用 PatchesMultiLine glyphs,通过编辑底层 ColumnDataSource 数据。与其他图形工具一样,要编辑的渲染器必须作为列表显式提供:

r = p.multi_line('xs', 'ys' source=source)
tool = FreehandDrawTool(renderers=[r])

该工具将自动修改数据源上与 xsys 字形的值。数据源中的任何其他列都将使用声明的 empty_value ,添加新点时。任何新添加的补丁或多线将插入 ColumnDataSource 提供的第一个渲染器。

限制可绘制的元素数量通常也很有用,例如,在指定特定数量的感兴趣区域时。使用 num_objects 属性,我们可以确保一旦达到限制,将从队列中弹出最旧的修补程序/多行,以便为正在添加的新修补程序/多行腾出空间。

Animation showing freehand drawing and delete actions

上面的动画显示了支持的工具操作,通过显示按下的键来突出显示鼠标操作(在光标周围加一个圆圈)和按键笔划。这个 PolyDrawTool 可以 Draw删除 补丁和多行:

绘制面片/多线

单击并拖动以开始绘制,释放鼠标按钮以完成绘制

删除面片/多行

单击一条线或面片将其选中,然后在鼠标位于绘图区域内时按BACKSPACE键。

删除 一次多个面片/线条:

删除所选内容

使用SHIFT+tap(或其他选择工具)选择面片/线,然后在鼠标位于绘图区域内时按BACKSPACE键。

PointDrawTool

  • 姓名: 'point_draw'

  • 菜单图标: point_draw_icon

这个 PointDrawTool 允许添加、拖动和删除点状图示符(属于 XYGlyph 在一个或多个渲染器上通过编辑底层 ColumnDataSource 数据。与其他图形工具一样,要编辑的渲染器必须作为列表显式提供:

c1 = p.circle('x', 'y', 'width', 'height', source=source)
r1 = p.rect('x', 'y', 0.1, 0.1, source=source2)
tool = PointDrawTool(renderers=[c1, r1])

该工具将自动修改数据源上与 xy 字形的值。数据源中的任何其他列都将使用声明的 empty_value ,添加新点时。任何新添加的点都将插入 ColumnDataSource 提供的第一个渲染器。

限制可以绘制的元素的数量通常也很有用。使用 num_objects 属性,我们可以确保一旦达到限制,将从队列中弹出最旧的点,以便为添加的新点腾出空间。

Animation showing point draw, drag, select and delete actions

上面的动画显示了支持的工具操作,通过显示按下的键来突出显示鼠标操作(在光标周围加一个圆圈)和按键笔划。PointDrawTool可以 AddMove删除 绘图上的点状图示符:

添加点

点击地图上的任何地方。

移动点

点击并拖动现有点。一旦松开鼠标按钮,该点将被删除。

删除点

点击一个点以选择它,然后在鼠标处于绘图区域内时按BACKSPACE键。

Move删除 一次多点:

移动所选内容

使用SHIFT+tap(或其他选择工具)选择点,然后拖动绘图上的任何位置。选择并拖动特定点将同时移动这两个点。

删除所选内容

使用SHIFT+tap(或其他选择工具)选择点,然后在鼠标位于绘图区域内时按BACKSPACE键。

PolyDrawTool

  • 姓名: 'poly_draw'

  • 菜单图标: poly_draw_icon

这个 PolyDrawTool 允许绘制、选择和删除 PatchesMultiLine 在一个或多个渲染器上通过编辑底层 ColumnDataSource 数据。与其他绘图工具一样,要编辑的渲染器必须以列表形式明确提供。

该工具将自动修改数据源上与 xsys 字形的值。数据源中的任何其他列都将使用声明的 empty_value ,添加新点时。任何新添加的补丁或多线将插入 ColumnDataSource 提供的第一个渲染器。

限制可绘制的元素数量通常也很有用,例如,在指定特定数量的感兴趣区域时。使用 num_objects 属性,我们可以确保一旦达到限制,将从队列中弹出最旧的修补程序/多行,以便为正在添加的新修补程序/多行腾出空间。

如果A vertex_renderer 如果提供了类似点的glyph,PolyDrawTool将使用它在所有提供的渲染器上显示多线/面片的顶点。这还允许在绘制时捕捉到现有顶点。

Animation showing polygon draw, select and delete actions

上面的动画显示了支持的工具操作,通过显示按下的键来突出显示鼠标操作(在光标周围加一个圆圈)和按键笔划。这个 PolyDrawTool 可以 AddMove删除 补丁和多行:

添加补丁/多行

双击以添加第一个顶点,然后使用tap添加每个后续顶点。要完成绘图操作,请双击以插入最终顶点或按ESC键。

移动补丁/多行

点击并拖动现有面片/多线。一旦松开鼠标按钮,该点将被删除。

删除面片/多行

点击一个面片/多行以将其选中,然后在鼠标位于绘图区域内时按BACKSPACE键。

PolyEditTool

  • 姓名: 'poly_edit'

  • 菜单图标: poly_edit_icon

poliedittool允许编辑一个或多个顶点 PatchesMultiLine 字形。要编辑的字形可以通过 renderers 财产。顶点的渲染器可以通过 vertex_renderer ,它必须呈现一个类似Glyph的点 XYGlyph 类型)。

该工具将自动修改数据源上与 xsys 字形的值。数据源中的任何其他列都将使用声明的 empty_value ,添加新点时。

Animation showing polygon and vertex drag, select and delete actions

上面的动画显示了支持的工具操作,通过显示按下的键来突出显示鼠标操作(在光标周围加一个圆圈)和按键笔划。这个 PolyEditTool 可以 AddMove删除 现有面片和多线上的顶点:

显示顶点

双击现有修补程序或多行

添加顶点

双击现有顶点以将其选中。工具将绘制下一个点。要添加它,请点击新位置。要完成编辑并添加点,请双击。否则按ESC键取消。

移动顶点

拖动现有顶点并释放鼠标按钮以释放它。

删除顶点

选择一个或多个顶点后,在鼠标光标位于绘图区域内时按BACKSPACE键。

控制详细程度

尽管HTML画布可以轻松地显示数万甚至数十万个字形,但这样做可能会对交互性能产生不利影响。为了适应大的ish(但不是巨大的)数据大小,Bokeh plots在客户端提供了“细节级别”(levelofdetail,LOD)功能。

注解

处理非常大的数据量时的另一个选择是在数据发送到浏览器之前使用Bokeh服务器对数据执行降采样。这种方法在超过一定的数据量后是不可避免的。看到了吗 运行Bokeh服务器 更多信息。

其基本思想是在交互操作(例如,平移或缩放)期间,绘图只绘制一小部分数据点。这有希望在飞行过程中保持互动的一般感觉,同时保持互动性能。有四个属性 Plot 控制LOD行为的对象:

lod_factor

属性类型: Int

应用详细程度抽取时要使用的抽取因子。

lod_interval

属性类型: Int

交互工具事件启用详细程度下采样的间隔(毫秒)。

lod_threshold

属性类型: Int

多个数据点,在这些数据点之上,glyph渲染器可以执行详细程度的下采样。设置为 None 禁用任何详细程度的下采样。

lod_timeout

属性类型: Int

检查交互工具事件是否仍在发生的超时(毫秒)。启用详细级别模式后,将每隔 lod_timeout 如果没有发生交互工具事件,则禁用详细级别模式。