散点图#

class Scatter(*args: Any, id: ID | None = None, **kwargs: Any)[source]#

基类: Marker

渲染从预定义的设计列表中选择的散点标记。

使用 Scatter 绘制任何 Bokeh 内置的标记类型:asteriskcirclecircle_crosscircle_dotcircle_xcircle_ycrossdashdiamonddiamond_crossdiamond_dotdothexhex_dotinverted_triangleplussquaresquare_crosssquare_dotsquare_pinsquare_xstarstar_dottriangletriangle_dottriangle_pinxy。此集合在 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 = 0.0#
类型:

AngleSpec

用于旋转标记的角度。

angle_units = 'rad'#
类型:

NotSerialized(Enum(AngleUnits))

用于关联属性的单位:deg、rad、grad 或 turn

decorations = []#
类型:

列表

图形装饰的集合,例如箭头。

使用 GlyphRenderer.add_decoration() 为图形渲染器的所有图形轻松设置。当需要更精细的控制时,使用此属性。

注意

装饰仅用于辅助图形的视觉外观,但它们不参与命中测试等。

fill_alpha = 1.0#
类型:

AlphaSpec

标记的填充 alpha 值。

fill_color = 'gray'#
类型:

ColorSpec

标记的填充颜色值。

hatch_alpha = 1.0#
类型:

AlphaSpec

标记的阴影填充透明度。

hatch_color = 'black'#
类型:

ColorSpec

标记的阴影填充颜色。

hatch_extra = {}#
类型:

Dict(String, Instance(Texture))

标记的阴影填充额外属性。

hatch_pattern = None#
类型:

HatchPatternSpec

标记的阴影填充图案。

hatch_scale = 12.0#
类型:

NumberSpec

标记的阴影填充缩放比例。

hatch_weight = 1.0#
类型:

NumberSpec

标记的阴影填充线宽。

hit_dilation = 1.0#
类型:

Size

用于定义标记对悬停和点击工具交互做出响应的范围的点击半径的膨胀因子。

line_alpha = 1.0#
类型:

AlphaSpec

标记的线条透明度。

line_cap = 'butt'#
类型:

LineCapSpec

标记的线条端点样式。

line_color = 'black'#
类型:

ColorSpec

标记的线条颜色。

line_dash = []#
类型:

DashPatternSpec

标记的线条虚线样式。

line_dash_offset = 0#
类型:

IntSpec

标记的线条虚线偏移量。

line_join = 'bevel'#
类型:

LineJoinSpec

标记的线条连接样式。

line_width = 1#
类型:

NumberSpec

标记的线条宽度。

marker = 'circle'#
类型:

MarkerSpec

要渲染的标记。可以是任何内置标记的名称,例如“circle”,或者对包含此类名称的数据列的引用。

name = None#
类型:

Nullable(String)

此模型的任意用户提供的名称。

查询文档以检索特定 Bokeh 模型时,此名称很有用。

>>> plot.circle([1,2,3], [4,5,6], name="temp")
>>> plot.select(name="temp")
[GlyphRenderer(id='399d53f5-73e9-44d9-9527-544b761c7705', ...)]

注意

不保证提供的任何名称的唯一性或其他条件,并且 Bokeh 不会出于任何原因直接使用该名称。

size = 4#
类型:

SizeSpec

标记在屏幕空间单位中的大小(直径)值。

syncable = True#
类型:

Bool

指示此模型是否应在 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)#
类型:

NumberSpec

标记中心的 x 轴坐标。

y = Field(field='y', transform=Unspecified, units=Unspecified)#
类型:

NumberSpec

标记中心的 y 轴坐标。

apply_theme(property_values: dict[str, Any]) None#

应用一组主题值,这些值将用于代替默认值,但不会覆盖应用程序设置的值。

传入的字典可能会原样保留并与其他实例共享以节省内存(因此调用者和 HasProps 实例都不应修改它)。

参数:

property_values (dict) – 要代替默认值使用的主题值

返回值:

None

classmethod clear_extensions() None#

清除任何当前定义的自定义扩展。

序列化调用将导致任何当前定义的自定义扩展都包含在生成的文档中,无论是否使用。此方法可用于清除所有现有的自定义扩展定义。

clone(**overrides: Any) Self#

复制一个 HasProps 对象。

这会创建一个原始模型的浅拷贝,即任何可变容器或子模型都不会被复制。允许在克隆时覆盖特定属性。

classmethod dataspecs() dict[str, DataSpec]#

收集此类中所有 DataSpec 属性的名称。

此方法 *始终* 遍历类层次结构,并包含在任何父类中定义的属性。

返回值:

DataSpec 属性的名称

返回类型:

set[str]

classmethod descriptors() list[PropertyDescriptor[Any]]#

属性描述符列表,按照定义顺序排列。

destroy() None#

清理对文档和属性的引用

equals(other: HasProps) bool#

模型的结构相等性。

参数:

other (HasProps) – 要比较的另一个实例

返回值:

如果属性在结构上相等,则为 True,否则为 False

使用 JavaScript 链接两个 Bokeh 模型属性。

这是一种简化方法,它简化了添加 CustomJS 回调以更新一个 Bokeh 模型属性,无论何时另一个属性更改值。

参数:
  • attr (str) – 此模型上 Bokeh 属性的名称

  • other (Model) – 要链接到 self.attr 的 Bokeh 模型

  • other_attr (str) – other 上要链接在一起的属性

  • attr_selector (int | str) – 链接可订阅 attr 中项目的索引

在版本 1.1 中添加

引发:

ValueError

示例

使用 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 (str) – 要搜索的属性的名称

  • raises (bool) – 如果缺少,是否引发异常或返回 None

返回值:

名为 name 的属性的描述符

返回类型:

PropertyDescriptor

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]]#

收集此类上所有也具有引用的属性的名称。

此方法 *始终* 遍历类层次结构,并包含在任何父类中定义的属性。

返回值:

具有引用的属性名称

返回类型:

set[str]

properties_with_values(*, include_defaults: bool = True, include_undefined: bool = False) dict[str, Any]#

收集一个字典,将属性名称映射到其值。

此方法 *始终* 遍历类层次结构,并包含在任何父类中定义的属性。

非可序列化属性将被跳过,并且属性值将采用“序列化”格式,这可能与您通常从属性中读取的值略有不同;此方法的目的是返回无损重建对象实例所需的信息。

参数:

include_defaults (bool, optional) – 是否包含自对象创建以来尚未显式设置的属性。(默认值:True)

返回值:

从属性名称到其值的映射

返回类型:

dict

query_properties_with_values(query: Callable[[PropertyDescriptor[Any]], bool], *, include_defaults: bool = True, include_undefined: bool = False) dict[str, Any]#

使用谓词查询 HasProps 实例的属性值。

参数:
  • query (可调用对象) – 一个可调用对象,它接受属性描述符并返回 True 或 False

  • include_defaults (bool, 可选) – 是否包含用户未显式设置的属性(默认值:True)

返回值:

匹配属性的属性名称和值的映射

返回类型:

dict

references() set[Model]#

返回此对象引用的所有 Models

remove_on_change(attr: str, *callbacks: Callable[[str, Any, Any], None]) None#

从此对象中删除回调函数。

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 (ClientSessionServerSessionNone, 可选) –

    这用于防止 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#
unapply_theme() None#

移除任何主题值并恢复默认值。

返回值:

None

update(**kwargs: Any) None#

根据给定的关键字参数更新对象的属性。

返回值:

None

示例

以下等效

from bokeh.models import Range1d

r = Range1d

# set properties individually:
r.start = 10
r.end = 20

# update properties together:
r.update(start=10, end=20)
property document: Document | None#

此模型附加到的Document(可以为None