散点图#
- 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)
注意
当您使用
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": [], "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": "p58942", "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()
为图形渲染器的所有图形轻松设置。当需要更精细的控制时,使用此属性。注意
装饰仅用于辅助图形的视觉外观,但它们不参与命中测试等。
- hatch_pattern = None#
- 类型:
HatchPatternSpec
标记的阴影填充图案。
- hatch_scale = 12.0#
- 类型:
标记的阴影填充缩放比例。
- hatch_weight = 1.0#
- 类型:
标记的阴影填充线宽。
- line_cap = 'butt'#
- 类型:
LineCapSpec
标记的线条端点样式。
- line_dash = []#
- 类型:
DashPatternSpec
标记的线条虚线样式。
- line_dash_offset = 0#
- 类型:
IntSpec
标记的线条虚线偏移量。
- line_join = 'bevel'#
- 类型:
LineJoinSpec
标记的线条连接样式。
- line_width = 1#
- 类型:
标记的线条宽度。
- marker = 'circle'#
- 类型:
要渲染的标记。可以是任何内置标记的名称,例如“circle”,或者对包含此类名称的数据列的引用。
- name = None#
-
此模型的任意用户提供的名称。
查询文档以检索特定 Bokeh 模型时,此名称很有用。
>>> plot.circle([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.circle([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 dataspecs() dict[str, DataSpec] #
收集此类中所有
DataSpec
属性的名称。此方法 *始终* 遍历类层次结构,并包含在任何父类中定义的属性。
- 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 中添加
- 引发:
示例
使用
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 的)
- 返回值:
seq[Model]
- select_one(selector: SelectorType) Model | None #
查询此对象及其所有引用,以查找与给定选择器匹配的对象。如果找到多个对象,则引发错误。返回单个匹配对象,如果未找到任何对象,则返回 None :param selector: :type selector: 类似 JSON 的
- 返回值:
模型
- set_from_json(name: str, value: Any, *, setter: Setter | None = None) None #
根据 JSON 设置此对象上的属性值。
- 参数:
name (str) – 要设置的属性的名称
value (JSON 值) – 要设置为属性的值
setter (ClientSession 或 ServerSession 或 None, 可选) –
这用于防止 Bokeh 应用程序的“回弹”更新。
在 Bokeh 服务器应用程序的上下文中,传入属性的更新将使用执行更新的会话进行注释。此值会传播到更新触发的任何后续更改通知。会话可以将其事件设置程序与其自身进行比较,并抑制任何来自其自身的更新。
- 返回值:
None
- set_select(selector: type[Model] | SelectorType, updates: dict[str, Any]) None #
使用指定的属性/值更新来更新与给定选择器匹配的对象。
- 参数:
selector (类似 JSON 的)
updates (dict)
- 返回值:
None
- themed_values() dict[str, Any] | None #
获取任何主题提供的覆盖。
结果以属性名称到值的字典形式返回,如果主题未覆盖此实例的任何值,则返回
None
。- 返回值:
字典或 None
- to_serializable(serializer: Serializer) ObjectRefRep #
将此对象转换为可序列化表示形式。
- trigger(attr: str, old: Any, new: Any, hint: DocumentPatchedEvent | None = None, setter: Setter | None = None) None #