bokeh.core.properties#
为了简化和自动化可用于描述图表和场景的模型的创建和使用,Bokeh 提供了一系列属性和属性混合类。属性类为大量有用的类型提供了自动验证和序列化功能。混合类和容器类则提供了向模型类批量添加属性的简便方法。
为Bokeh模型提供属性类型
属性是可以作为Bokeh模型上的类属性分配的对象,以提供自动序列化、验证和文档。
本文档分为以下几个部分:
概述#
模块中定义了许多属性类型,例如 Int 用于表示整数值,Seq 用于表示序列(例如列表或元组等)。属性也可以组合使用:Seq(Float) 表示一个浮点数值的序列。
例如,以下定义了一个具有整数、字符串和列表[浮点数]属性的模型:
class SomeModel(Model):
foo = Int
bar = String(default="something")
baz = List(Float, help="docs for baz prop")
如所见,属性可以仅声明为属性类型,例如
foo = Int,在这种情况下,属性会在新的 Model 对象上自动实例化。或者,属性可以在类上实例化,并使用默认值和帮助字符串进行配置。
此类的属性可以通过向初始化器指定关键字参数来初始化:
m = SomeModel(foo=10, bar="a str", baz=[1,2,3,4])
但也可以通过设置实例上的属性来实现:
m.foo = 20
尝试将属性设置为错误类型的值将导致ValueError异常:
>>> m.foo = 2.3
Traceback (most recent call last):
<< traceback omitted >>
ValueError: expected a value of type Integral, got 2.3 of type float
具有属性的模型知道如何序列化自己,以便被BokehJS理解。此外,属性上提供的任何帮助字符串都可以通过bokeh.sphinxext模块中的Sphinx扩展轻松自动提取。
基本属性#
- class Alpha(default: float | UndefinedType | IntrinsicType = 1.0, *, help: str | None = None)[source]#
- class Angle(default: float | UndefinedType | IntrinsicType = 0.0, *, help: str | None = None)[source]#
接受浮点角度值。
Angle等同于Float,但在语义上更有意义的情况下提供。- Parameters:
默认 (float, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值: None)
- class Any(default: Any | UndefinedType | IntrinsicType | None = None, help: str | None = None)[source]#
接受所有值。
Any属性不进行任何验证或转换。- Parameters:
默认 (obj 或 None, 可选) – 从此属性创建的属性的默认值(默认值:None)
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class AnyModel(HasProps): ... prop = Any() ... >>> m = AnyModel() >>> m.prop = True >>> m.prop = 10 >>> m.prop = 3.14 >>> m.prop = "foo" >>> m.prop = [1, 2, 3]
- class AnyRef(default: Any | UndefinedType | IntrinsicType | None = None, help: str | None = None)[source]#
接受所有值并强制引用发现。
- class Auto[source]#
仅接受字符串“auto”。
适用于可以配置为“自动”行为的属性。
Example
此属性通常与
Either属性结合使用时最为有用。>>> class AutoModel(HasProps): ... prop = Either(Float, Auto) ... >>> m = AutoModel() >>> m.prop = 10.2 >>> m.prop = "auto" >>> m.prop = "foo" # ValueError !! >>> m.prop = [1, 2, 3] # ValueError !!
- class Bool(default: bool | UndefinedType | IntrinsicType = False, *, help: str | None = None)[source]#
接受布尔值。
- Parameters:
默认值 (obj, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class BoolModel(HasProps): ... prop = Bool(default=False) ... >>> m = BoolModel() >>> m.prop = True >>> m.prop = False >>> m.prop = 10 # ValueError !!
- class Byte(default: int | UndefinedType | IntrinsicType = 0, help: str | None = None)[source]#
接受整数字节值(0-255)。
Example
>>> class ByteModel(HasProps): ... prop = Byte(default=0) ... >>> m = ByteModel() >>> m.prop = 255 >>> m.prop = 256 # ValueError !! >>> m.prop = 10.3 # ValueError !!
- class Bytes(default: bytes | UndefinedType | IntrinsicType = b'', *, help: str | None = None)[source]#
接受字节值。
- class Color(default: str | tuple[int, int, int] | tuple[int, int, int, float] | UndefinedType | IntrinsicType = Undefined, *, help: str | None = None)[source]#
接受多种方式的颜色值。
如果颜色以字符串形式提供,Bokeh 会判断该字符串是否代表一个命名的 CSS 颜色(例如“red”),一个 CSS4 颜色字符串(例如“rgb(0, 200, 0)”),或一个十六进制值(例如“#00FF00”)。
如果提供了一个3元组,它将被视为RGB值(介于0和255之间)。
如果提供了一个4元组,它将被视为RGBA值(RGB值在0到255之间,alpha值在0到1之间的浮点数)。
如果提供了一个32位无符号整数,它将被视为RGBA值,按照0xRRGGBBAA的字节顺序模式处理。
Example
>>> class ColorModel(HasProps): ... prop = Color() ... >>> m = ColorModel() >>> m.prop = "firebrick" >>> m.prop = "#a240a2" >>> m.prop = (100, 100, 255) >>> m.prop = (100, 100, 255, 0.5) >>> m.prop = "junk" # ValueError !! >>> m.prop = (100.2, 57.3, 10.2) # ValueError !!
- class Complex(default: complex | UndefinedType | IntrinsicType = 0j, *, help: str | None = None)[源代码]#
接受复杂的浮点数值。
- Parameters:
默认 (complex, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
- CoordinateLike#
Either(Float, Datetime, Factor(Either(String, Tuple(String, String), Tuple(String, String, String)))) 的别名
- class DashPattern(default=[], *, help: str | None = None)[source]#
接受线条虚线规格。
描述线条虚线样式的Express模式。
DashPattern值可以通过多种方式指定:一个枚举: “solid”, “dashed”, “dotted”, “dotdash”, “dashdot”
一个元组或整数列表,符合HTML5 Canvas 虚线规范样式。 请注意,如果整数列表的元素个数为奇数,则 会将其复制,复制的列表将成为新的虚线列表。
要指示虚线已关闭(实线),请指定空列表 []。
- class Date(*, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
接受ISO格式的日期(但不包括日期时间)值。
- class Datetime(default: str | date | datetime | UndefinedType | IntrinsicType = Undefined, *, help: str | None = None)[source]#
接受ISO格式的日期时间值。
- class Either(type_param0: type[Property[Any]] | Property[Any], *type_params: type[Property[Any]] | Property[Any], default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
根据其他属性类型的序列接受值。
Example
>>> class EitherModel(HasProps): ... prop = Either(Bool, Int, Auto) ... >>> m = EitherModel() >>> m.prop = True >>> m.prop = 10 >>> m.prop = "auto" >>> m.prop = 10.3 # ValueError !! >>> m.prop = "foo" # ValueError !!
- class Enum(enum: type[Literal['']], *, default: str | UndefinedType | IntrinsicType = ..., help: str | None = ...)[源代码]#
- class Enum(enum: Enumeration, *, default: str | UndefinedType | IntrinsicType = ..., help: str | None = ...)
- class Enum(enum: str, *values: str, default: str | UndefinedType | IntrinsicType = ..., help: str | None = ...)
接受枚举中的值。
枚举中的第一个值用作默认值,除非使用了
default关键字参数。有关更多信息,请参见 bokeh.core.enums。
- class Float(default: float | UndefinedType | IntrinsicType = 0.0, *, help: str | None = None)[source]#
接受浮点数值。
- Parameters:
默认 (float, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class FloatModel(HasProps): ... prop = Float() ... >>> m = FloatModel() >>> m.prop = 10 >>> m.prop = 10.3 >>> m.prop = "foo" # ValueError !!
- class FontSize(default: str | UndefinedType | IntrinsicType = '', *, help: str | None = None)[source]#
- class Image(*, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[源代码]#
接受图像文件类型,例如PNG、JPEG、TIFF等。
此属性可以通过以下方式配置:
一个
pathlib.Path图像文件路径一个数据URL编码的图像字符串
一个字符串文件名,用于使用
PIL.Image.open加载一个RGB(A)的NumPy数组,将被转换为PNG
一个
PIL.Image.Image对象
在所有情况下,图像数据都被序列化为Base64编码的字符串。
- class Int(default: int | UndefinedType | IntrinsicType = 0, *, help: str | None = None)[源代码]#
接受有符号整数值。
- Parameters:
默认 (int, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class IntModel(HasProps): ... prop = Int() ... >>> m = IntModel() >>> m.prop = 10 >>> m.prop = -200 >>> m.prop = 10.3 # ValueError !!
- class Interval(type_param: type[Property[T]] | Property[T], start: T, end: T, *, default: T | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[source]#
接受包含在给定区间内的数值。
- Parameters:
interval_type (数值属性) – 范围的数值类型,例如
Int,Float开始 (数字) – 范围的最小允许值。小于
start的值将导致验证错误。end (number) – 范围的最大允许值。大于
end的值将导致验证错误。
Example
>>> class RangeModel(HasProps): ... prop = Range(Float, 10, 20) ... >>> m = RangeModel() >>> m.prop = 10 >>> m.prop = 20 >>> m.prop = 15 >>> m.prop = 2 # ValueError !! >>> m.prop = 22 # ValueError !! >>> m.prop = "foo" # ValueError !!
- class JSON(default: str | UndefinedType | IntrinsicType = '', *, help: str | None = None)[source]#
接受JSON字符串值。
该值由BokehJS作为包含JSON内容的字符串传输和接收。即,您必须使用
JSON.parse将值解包为JavaScript哈希。- Parameters:
默认值 (字符串, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
- class MinMaxBounds(default='auto', *, accept_datetime: bool = False, help: str | None = None)[source]#
接受 (最小, 最大) 边界元组以用于范围。
边界以
(min, max)的元组形式提供,因此无论你的范围是递增还是递减,第一项应该是范围的最小值,第二项应该是最大值。设置min > max将导致ValueError。将边界设置为None将允许您的图表随意平移/缩放。如果您只想限制图表的一端,可以将最小值或最大值设置为
None,例如DataRange1d(bounds=(None, 12))
- class NonNegative(type_param: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
一个接受其他类型值但具有未定义默认值的属性。
- class Null(default: None | UndefinedType | IntrinsicType = None, *, help: str | None = None)[source]#
仅接受
None值。将此与
Either(Null, Type)结合使用或作为Nullable(Type)使用。
- class Percent(default: float | UndefinedType | IntrinsicType = 0.0, *, help: str | None = None)[源代码]#
接受浮点百分比值。
Percent对于指定诸如 alpha 值和范围等内容可能非常有用且具有语义意义。- Parameters:
默认 (float, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class PercentModel(HasProps): ... prop = Percent() ... >>> m = PercentModel() >>> m.prop = 0.0 >>> m.prop = 0.2 >>> m.prop = 1.0 >>> m.prop = -2 # ValueError !! >>> m.prop = 5 # ValueError !!
- class Positive(type_param: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
一个接受其他类型值但具有未定义默认值的属性。
- class RGB(*, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
接受颜色.RGB值。
- class Regex(regex: str, *, default: str | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[source]#
接受与给定正则表达式匹配的字符串。
- Parameters:
默认值 (字符串, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class RegexModel(HasProps): ... prop = Regex("foo[0-9]+bar") ... >>> m = RegexModel() >>> m.prop = "foo123bar" >>> m.prop = "foo" # ValueError !! >>> m.prop = [1, 2, 3] # ValueError !!
- class Size(default: float | UndefinedType | IntrinsicType = 0.0, *, help: str | None = None)[源代码]#
接受非负数值。
- Parameters:
默认 (float, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class SizeModel(HasProps): ... prop = Size() ... >>> m = SizeModel() >>> m.prop = 0 >>> m.prop = 10e6 >>> m.prop = -10 # ValueError !! >>> m.prop = "foo" # ValueError !!
- class String(default: str | UndefinedType | IntrinsicType = '', *, help: str | None = None)[源代码]#
接受字符串值。
- Parameters:
默认值 (字符串, 可选) – 从此属性创建的属性的默认值。
帮助 (str 或 None, 可选) – 此属性的文档字符串。它将在生成SpinX文档时自动被bokeh_prop扩展使用。(默认值:None)
Example
>>> class StringModel(HasProps): ... prop = String() ... >>> m = StringModel() >>> m.prop = "foo" >>> m.prop = 10.3 # ValueError !! >>> m.prop = [1, 2, 3] # ValueError !!
容器属性#
- class Array(item_type: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[源代码]#
接受NumPy数组值。
- class ColumnData(keys_type: type[Property[Any]] | Property[Any], values_type: type[Property[Any]] | Property[Any], *, default: T | UndefinedType | IntrinsicType = {}, help: str | None = None)[source]#
接受一个适合作为
ColumnDataSource的data属性的Python字典。这个类是
Dict的一个特化版本,它能够高效地处理作为NumPy数组的列编码。
- class Dict(keys_type: type[Property[Any]] | Property[Any], values_type: type[Property[Any]] | Property[Any], *, default: T | UndefinedType | IntrinsicType = {}, help: str | None = None)[源代码]#
接受Python字典值。
如果传入了一个默认值,那么每次新使用此属性时都会使用它的浅拷贝。
- class List(item_type: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = [], help: str | None = None)[source]#
接受Python列表值。
- class Seq(item_type: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[source]#
接受非字符串的有序值序列,例如列表、元组、数组。
- class Set(item_type: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = {}, help: str | None = None)[source]#
接受Python
set()值。
DataSpec 属性#
- class AngleSpec(default=Undefined, units_default='rad', *, help: str | None = None)[source]#
一个
DataSpec属性,它接受数值固定值,并且还提供了一个相关的单位属性来存储角度单位。可接受的单位值为
"deg","rad","grad"和"turn"。
- class ColorSpec(default, *, help: str | None = None)[源代码]#
-
ColorSpec属性首先尝试将字符串值解释为颜色。否则,字符串值将被解释为字段名称。例如:m.color = "#a4225f" # value (hex color string) m.color = "firebrick" # value (named CSS color string) m.color = "foo" # field (named "foo")
这种自动解释可以通过直接使用字典格式或使用
field()函数来覆盖:m.color = { "field": "firebrick" } # field (named "firebrick") m.color = field("firebrick") # field (named "firebrick")
- class DataSpec(value_type, default, *, help: str | None = None)[源代码]#
接受固定值或引用
ColumnDataSource中列名的字符串名称的属性的基类。许多Bokeh模型具有用户可能希望设置为单个固定值或从数据源的某个列中获取值的属性。作为一个具体的例子,考虑一个具有
x属性用于定位的图形。我们可能希望将所有绘制的图形设置为具有相同的位置,例如x=10。能够简单地编写以下内容将非常方便:glyph.x = 10
或者,也许每个绘制的字形应该根据数据源的“pressure”列具有不同的位置。在这种情况下,我们希望能够编写:
glyph.x = "pressure"
Bokeh
DataSpec属性(及其子类)提供了这种表达上的简便性和一致性。最终,所有DataSpec属性都会解析为字典值,根据设置方式的不同,可能包含"value"键或"field"键。例如:
glyph.x = 10 # => { 'value': 10 } glyph.x = "pressure" # => { 'field': 'pressure' }
当这些底层的字典值在浏览器中被接收时,BokehJS知道如何解释它们并采取正确的、预期的操作(例如,在
x=10处绘制图形,或使用“pressure”列中的x坐标绘制图形)。通过这种方式,这两种用例都可以在python中轻松表达,从用户的角度来看,无需以不同的方式处理任何内容。值得注意的是,
DataSpec属性也可以直接使用格式正确的字典值来设置:glyph.x = { 'value': 10 } # same as glyph.x = 10 glyph.x = { 'field': 'pressure' } # same as glyph.x = "pressure"
在某些情况下,直接将属性设置为字典可能很有用。例如,一些
DataSpec子类还会向字典中添加一个"units"键。这个键通常会自动设置,但字典格式提供了一种直接机制,以便在必要时进行覆盖。此外,DataSpec可以有一个"transform"键,它指定了在固定值或字段值使用之前应应用的客户端转换。例如,您可能希望对x值应用Jitter转换:glyph.x = { 'value': 10, 'transform': Jitter(width=0.4) }
请注意,
DataSpec通常单独使用时并不实用。通常,模型会使用其中一个子类(如NumberSpec或ColorSpec)来定义属性。例如,一个具有x、y和color属性的 Bokeh 模型,能够自动处理固定值或列,可能看起来像这样:class SomeModel(Model): x = NumberSpec(default=0, help="docs for x") y = NumberSpec(default=0, help="docs for y") color = ColorSpec(help="docs for color") # defaults to None
- class DistanceSpec(default=Undefined, units_default='data', *, help: str | None = None)[source]#
一个
DataSpec属性,接受数值固定值或引用ColumnDataSource中列的字符串,并且还提供了一个相关的单位属性来存储单位信息。单位的可接受值为"screen"和"data"。
- class FontSizeSpec(default, *, help: str | None = None)[source]#
一个
DataSpec属性,接受固定值的字体大小。FontSizeSpec属性首先尝试将字符串值解释为字体大小(即有效的 CSS 长度值)。否则,字符串值将被解释为字段名称。例如:m.font_size = "13px" # value m.font_size = "1.5em" # value m.font_size = "foo" # field
所有有效的CSS长度单位的完整列表可以在这里找到:
- class MarkerSpec(default, *, help: str | None = None)[source]#
一个
DataSpec属性,接受标记类型作为固定值。MarkerSpec属性首先尝试将字符串值解释为标记类型。否则,字符串值将被解释为字段名称。例如:m.font_size = "circle" # value m.font_size = "square" # value m.font_size = "foo" # field
- class NumberSpec(default=Undefined, *, help: str | None = None, accept_datetime=True, accept_timedelta=True)[源代码]#
一个
DataSpec属性,接受数字和日期时间固定值。默认情况下,日期和日期时间值会立即转换为自纪元以来的毫秒数。可以通过传递
accept_datetime=False来禁用日期时间值的处理。默认情况下,timedelta 值会立即转换为绝对毫秒数。可以通过传递
accept_timedelta=False来禁用 timedelta 值的处理。Timedelta 值被解释为绝对毫秒。
m.location = 10.3 # value m.location = "foo" # field
- class SizeSpec(default=Undefined, *, help: str | None = None, accept_datetime=True, accept_timedelta=True)[源代码]#
一个
DataSpec属性,接受非负数值固定值作为大小值,或引用ColumnDataSource中列的字符串。
- class StringSpec(default, *, help: str | None = None)[源代码]#
一个接受字符串固定值的
DataSpec属性。因为可接受的固定值和字段名称都是字符串,所以可能需要明确区分这些可能性。默认情况下,字符串值被解释为字段,但你可以使用
value()函数来指定字符串被解释为值:m.title = value("foo") # value m.title = "foo" # field
- class UnitsSpec(default, units_enum, units_default, *, help: str | None = None)[源代码]#
一个
DataSpec属性,它接受数值固定值,并且还提供一个相关的单位属性来存储单位信息。
助手#
- expr(expr: Expression, transform: NotRequired[Transform] = Unspecified, units: NotRequired[str] = Unspecified) None#
Expr(expr: 'Expression', transform: 'NotRequired[Transform]' = 未指定, units: 'NotRequired[str]' = 未指定)
特殊属性#
- class Instance(instance_type: type[T] | Callable[[], type[T]] | str, default: T | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[source]#
接受可序列化类型的实例值(例如
HasProps)。
- class InstanceDefault(model: type[I], **kwargs: Any)[source]#
为实例默认值提供一个延迟初始化器。
这对于具有实例属性的Bokeh模型非常有用,这些属性应该为每个模型实例具有唯一的默认值。使用InstanceDefault将比使用lambda初始化器提供更好的面向用户的文档。
- class Include(delegate: type[HasProps], *, help: str = '', prefix: str | None = None)[source]#
在Bokeh模型中包含“mix-in”属性集合。
详情请参见 bokeh.core.property_mixins。
- class Nullable(type_param: type[Property[T]] | Property[T], *, default: T | None | UndefinedType | IntrinsicType = None, help: str | None = None)[source]#
一个接受
None或其他类型值的属性。
- class NotSerialized(type_param: type[Property[T]] | Property[T], *, default: T | UndefinedType | IntrinsicType = Intrinsic, help: str | None = None)[source]#
一个属性,其状态不会与浏览器同步。
- class Object(instance_type: type[T] | Callable[[], type[T]] | str, default: T | UndefinedType | IntrinsicType = Undefined, help: str | None = None)[source]#
接受任何类实例的值。
注意
这主要用于验证目的。不可序列化的对象在序列化过程中无论如何都会失败。
- class Override(*, default: T)[源代码]#
在派生模型中覆盖Bokeh属性的属性。
在子类化Bokeh模型时,可能希望从基类的属性中更改属性本身的某些属性。这是通过使用
Override类来实现的。目前,
Override只能用于覆盖属性的default值。- Keyword Arguments:
默认 (obj) – 子类上此属性的默认值
Example
考虑以下类定义:
from bokeh.model import Model from bokeh.properties import Int, Override class Parent(Model): foo = Int(default=10) class Child(Parent): foo = Override(default=20)
父类有一个整数属性
foo,默认值为 10。子类使用以下代码:foo = Override(default=20)
指定子类实例中
foo属性的默认值应为20:>>> p = Parent() >>> p.foo 10 >>> c = Child() >>> c.foo 20
仅验证属性#
验证控制#
默认情况下,Bokeh属性会对值进行类型验证。这有助于确保Python和JavaScript之间交换的任何数据的一致性,并在用户尝试设置错误类型的值时提供详细且即时的反馈。然而,这些类型检查会带来一些开销。在某些情况下,可能需要在特定位置甚至完全关闭验证,以提高性能。以下API可用于控制类型验证的发生时机。