散点#
- class Scatter(*args: Any, id: ID | None = None, **kwargs: Any)[source]#
基类:
Marker
渲染从预定义设计列表中选择的散点标记。
使用
Scatter
绘制 Bokeh 内置的任何标记类型:asterisk
,circle
,circle_cross
,circle_dot
,circle_x
,circle_y
,cross
,dash
,diamond
,diamond_cross
,diamond_dot
,dot
,hex
,hex_dot
,inverted_triangle
,plus
,square
,square_cross
,square_dot
,square_pin
,square_x
,star
,star_dot
,triangle
,triangle_dot
,triangle_pin
,x
, 或y
。此集合在MarkerType
中提供。Bokeh 的内置标记由一组基本标记组成,其中大多数可以与不同类型的附加视觉特征组合。
您可以通过两种方式选择标记类型
要为所有值绘制相同的标记,请使用
marker
属性来指定特定标记的名称。例如glyph = Scatter(x="x", y="y", size="sizes", marker="square") plot.add_glyph(source, glyph)
这将为所有点渲染正方形标记。
或者,要使用数据源列中指定的标记类型,请将列名分配给
marker
属性。例如# source.data['markers'] = ["circle", "square", "circle", ... ] glyph = Scatter(x="x", y="y", size="sizes", marker="markers") plot.add_glyph(source, glyph)
也可以定义自定义标记。请参阅
bokeh.models.Scatter.defs
。注意
当您使用
Scatter
绘制circle
标记时,您只能在 屏幕单位 中分配大小(通过将像素数传递给size
属性)。如果您想在 数据单位 中定义圆的半径,请使用Circle
字形,而不是Scatter
字形。注意
当使用 WebGL 输出后端时,具有多种标记类型的
Scatter
标记可能会以不同的顺序绘制。这是为了性能而做出的明确权衡。示例
import numpy as np from bokeh.core.enums import MarkerType from bokeh.io import curdoc, show from bokeh.models import ColumnDataSource, Grid, LinearAxis, Plot, Scatter N = len(MarkerType) x = np.linspace(-2, 2, N) y = x**2 markers = list(MarkerType) source = ColumnDataSource(dict(x=x, y=y, markers=markers)) plot = Plot( title=None, width=300, height=300, min_border=0, toolbar_location=None) glyph = Scatter(x="x", y="y", size=20, fill_color="#74add1", marker="markers") plot.add_glyph(source, glyph) xaxis = LinearAxis() plot.add_layout(xaxis, 'below') yaxis = LinearAxis() plot.add_layout(yaxis, 'left') plot.add_layout(Grid(dimension=0, ticker=xaxis.ticker)) plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker)) curdoc().add_root(plot) show(plot)
JSON 原型
{ "angle": { "type": "value", "value": 0.0 }, "decorations": [], "defs": { "type": "map" }, "fill_alpha": { "type": "value", "value": 1.0 }, "fill_color": { "type": "value", "value": "gray" }, "hatch_alpha": { "type": "value", "value": 1.0 }, "hatch_color": { "type": "value", "value": "black" }, "hatch_extra": { "type": "map" }, "hatch_pattern": { "type": "value", "value": null }, "hatch_scale": { "type": "value", "value": 12.0 }, "hatch_weight": { "type": "value", "value": 1.0 }, "hit_dilation": 1.0, "id": "p60652", "js_event_callbacks": { "type": "map" }, "js_property_callbacks": { "type": "map" }, "line_alpha": { "type": "value", "value": 1.0 }, "line_cap": { "type": "value", "value": "butt" }, "line_color": { "type": "value", "value": "black" }, "line_dash": { "type": "value", "value": [] }, "line_dash_offset": { "type": "value", "value": 0 }, "line_join": { "type": "value", "value": "bevel" }, "line_width": { "type": "value", "value": 1 }, "marker": { "type": "value", "value": "circle" }, "name": null, "size": { "type": "value", "value": 4 }, "subscribed_events": { "type": "set" }, "syncable": true, "tags": [], "x": { "field": "x", "type": "field" }, "y": { "field": "y", "type": "field" } }
- angle_units = 'rad'#
- 类型:
用于关联属性的单位:deg、rad、grad 或 turn
- decorations = []#
- 类型:
字形装饰的集合,例如箭头头部。
使用
GlyphRenderer.add_decoration()
可以轻松为字形渲染器的所有字形进行设置。当需要更精细的控制时,请使用此属性。注意
装饰仅用于辅助字形的视觉外观,但不参与点击测试等。
- defs = {}#
-
自定义标记定义的集合。
有两种方法可以定义自定义标记
构造并返回
Path2D
的实例
CustomJS(code=''' export default (args, obj, {ctx, i, r, visuals}) => { const path = new Path2D() path.arc(0, 0, r, 0, 2*Math.PI, false) return path } ''')
直接绘制到
Context2d
的实例
CustomJS(code=''' export default (args, obj, {ctx, i, r, visuals}) => { ctx.arc(0, 0, r, 0, 2*Math.PI, false) visuals.fill.apply(ctx, i) visuals.hatch.apply(ctx, i) visuals.line.apply(ctx, i) } ''')
注意
自定义标记的名称必须以 “@” 前缀开头,例如 “@my_marker”。
注意
只有
"canvas"
和"svg"
后端支持自定义标记。
- hatch_pattern = None#
- 类型:
HatchPatternSpec
标记的阴影线图案值。
- line_cap = 'butt'#
- 类型:
LineCapSpec
标记的线帽值。
- line_dash = []#
- 类型:
DashPatternSpec
标记的线条虚线值。
- line_dash_offset = 0#
- 类型:
IntSpec
标记的线条虚线偏移值。
- line_join = 'bevel'#
- 类型:
LineJoinSpec
标记的线条连接值。
- marker = 'circle'#
- 类型:
要渲染的标记。这可以是任何内置标记的名称,例如 “circle”,也可以是对包含此类名称的数据列的引用。
- name = None#
-
此模型的任意用户提供的名称。
当查询文档以检索特定的 Bokeh 模型时,此名称可能很有用。
>>> plot.scatter([1,2,3], [4,5,6], name="temp") >>> plot.select(name="temp") [GlyphRenderer(id='399d53f5-73e9-44d9-9527-544b761c7705', ...)]
注意
对于提供的任何名称,不强制执行唯一性保证或其他条件,Bokeh 出于任何原因也不会直接使用该名称。
- syncable = True#
- 类型:
指示此模型在 Web 浏览器中更新时是否应同步回 Bokeh 服务器。当处理频繁更新的对象且我们不需要其更新值时,设置为
False
可能有助于减少网络流量。注意
将此属性设置为
False
将阻止此对象上的任何on_change()
回调触发。但是,任何 JS 端回调仍然有效。
- tags = []#
- 类型:
要附加到此模型的任意用户提供值的可选列表。
当查询文档以检索特定的 Bokeh 模型时,此数据可能很有用
>>> r = plot.scatter([1,2,3], [4,5,6]) >>> r.tags = ["foo", 10] >>> plot.select(tags=['foo', 10]) [GlyphRenderer(id='1de4c3df-a83d-480a-899b-fb263d3d5dd9', ...)]
或者仅仅是将任何必要的元数据附加到可由
CustomJS
回调等访问的模型的便捷方式。注意
对于提供的任何标签,不强制执行唯一性保证或其他条件,Bokeh 出于任何原因也不会直接使用标签。
- x = Field(field='x', transform=Unspecified, units=Unspecified)#
- 类型:
标记中心点的 x 轴坐标。
- y = Field(field='y', transform=Unspecified, units=Unspecified)#
- 类型:
标记中心点的 y 轴坐标。
- apply_theme(property_values: dict[str, Any]) None #
应用一组主题值,这些值将代替默认值,但不会覆盖应用程序设置的值。
传入的字典可以保持原样并与其他实例共享,以节省内存(因此调用者和
HasProps
实例都不应修改它)。- 参数:
property_values (dict) – 用于代替默认值的主题值
- 返回:
None
- classmethod clear_extensions() None #
清除任何当前定义的自定义扩展。
序列化调用将导致任何当前定义的自定义扩展与生成的文档一起包含,无论是否使用它们。此方法可用于清除所有现有的自定义扩展定义。
- classmethod descriptors() list[PropertyDescriptor[Any]] #
属性描述符列表,按定义顺序排列。
- equals(other: HasProps) bool #
模型的结构相等性。
- 参数:
other (HasProps) – 要比较的另一个实例
- 返回:
如果属性在结构上相等,则为 True,否则为 False
- js_link(attr: str, other: Model, other_attr: str, attr_selector: int | str | None = None) None #
使用 JavaScript 链接两个 Bokeh 模型属性。
这是一种便捷方法,可简化添加
CustomJS
回调,以便在一个 Bokeh 模型属性的值发生更改时更新另一个属性。- 参数:
在版本 1.1 中添加
- Raises:
示例
带有
js_link
的此代码select.js_link('value', plot, 'sizing_mode')
等效于以下代码
from bokeh.models import CustomJS select.js_on_change('value', CustomJS(args=dict(other=plot), code="other.sizing_mode = this.value" ) )
此外,要使用 attr_selector 将范围滑块的左侧附加到绘图的 x_range
range_slider.js_link('value', plot.x_range, 'start', attr_selector=0)
这等效于
from bokeh.models import CustomJS range_slider.js_on_change('value', CustomJS(args=dict(other=plot.x_range), code="other.start = this.value[0]" ) )
- js_on_change(event: str, *callbacks: JSChangeCallback) None #
将
CustomJS
回调附加到任意 BokehJS 模型事件。在 BokehJS 端,模型属性的更改事件形式为
"change:property_name"
。为了方便起见,如果传递给此方法的事件名称也是模型上属性的名称,则它将自动以"change:"
为前缀。# these two are equivalent source.js_on_change('data', callback) source.js_on_change('change:data', callback)
然而,除了属性更改事件之外,还有其他类型的事件也可能需要响应。例如,要在数据流式传输到
ColumnDataSource
时运行回调,请使用源上的"stream"
事件。source.js_on_change('streaming', callback)
- classmethod lookup(name: str, *, raises: bool = True) PropertyDescriptor[Any] | None #
查找类上 Bokeh 属性的
PropertyDescriptor
,给定属性名称。- 参数:
- 返回:
名为
name
的属性的描述符- 返回类型:
- on_change(attr: str, *callbacks: PropertyCallback) None #
在此对象上添加一个回调,以便在
attr
更改时触发。- 参数:
attr (str) – 此对象上的属性名称
*callbacks (callable) – 要注册的回调函数
- 返回:
None
示例
widget.on_change('value', callback1, callback2, ..., callback_n)
- on_event(event: str | type[Event], *callbacks: Callable[[Event], None] | Callable[[], None]) None #
当在此模型上发生指定的事件时运行回调。
并非所有模型都支持所有事件。有关哪些模型能够触发哪些事件的更多信息,请参阅 bokeh.events 中的特定事件。
- classmethod parameters() list[Parameter] #
生成适用于从 glyph 派生的函数的 Python
Parameter
值。- 返回:
list(Parameter)
- classmethod properties(*, _with_props: bool = False) set[str] | dict[str, Property[Any]] #
收集此类上属性的名称。
警告
在 Bokeh 的未来版本中,此方法将返回一个字典,该字典将属性名称映射到属性对象。为了使当前此方法的使用方式在未来仍然适用,请将返回值包装在
list
中。- 返回:
属性名称
- classmethod properties_with_refs() dict[str, Property[Any]] #
收集此类上所有也具有引用的属性的名称。
此方法始终遍历类层次结构,并包括在任何父类上定义的属性。
- properties_with_values(*, include_defaults: bool = True, include_undefined: bool = False) dict[str, Any] #
收集一个字典,将属性名称映射到它们的值。
此方法始终遍历类层次结构,并包括在任何父类上定义的属性。
不可序列化的属性将被跳过,并且属性值采用“序列化”格式,这可能与您通常从属性中读取的值略有不同;此方法的目的是返回无损地重构对象实例所需的信息。
- query_properties_with_values(query: Callable[[PropertyDescriptor[Any]], bool], *, include_defaults: bool = True, include_undefined: bool = False) dict[str, Any] #
使用谓词查询
HasProps
实例的属性值。
- select(selector: SelectorType) Iterable[Model] #
查询此对象及其所有引用,以查找与给定选择器匹配的对象。
- 参数:
selector (JSON-like)
- 返回:
seq[Model]
- select_one(selector: SelectorType) Model | None #
查询此对象及其所有引用,以查找与给定选择器匹配的对象。如果找到多个对象,则引发错误。返回单个匹配对象,如果未找到任何内容,则返回 None :param selector: :type selector: JSON-like
- 返回:
Model
- set_from_json(name: str, value: Any, *, setter: Setter | None = None) None #
从此对象的 JSON 中设置属性值。
- 参数:
name (str) – 要设置的属性的名称
value (JSON-value) – 要设置为属性的值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止对 Bokeh 应用程序的“回旋镖”更新。
在 Bokeh 服务器应用程序的上下文中,传入的属性更新将使用正在执行更新的会话进行注释。此值会通过更新触发的任何后续更改通知进行传播。会话可以将事件 setter 与自身进行比较,并阻止任何源自自身的更新。
- 返回:
None
- set_select(selector: type[Model] | SelectorType, updates: dict[str, Any]) None #
使用指定的属性/值更新来更新与给定选择器匹配的对象。
- 参数:
selector (JSON-like)
updates (dict)
- 返回:
None
- themed_values() dict[str, Any] | None #
获取任何主题提供的覆盖。
结果以从属性名称到值的字典形式返回,如果没有主题覆盖此实例的任何值,则返回
None
。- 返回:
dict 或 None
- to_serializable(serializer: Serializer) ObjectRefRep #
将此对象转换为可序列化的表示形式。
- trigger(attr: str, old: Any, new: Any, hint: DocumentPatchedEvent | None = None, setter: Setter | None = None) None #