ポークモデル

低級インターフェース.

次に,Bokeh対象システムを構成する多くの最も一般的なモデルを示す概念図である.Bokehマップを作成するためには,これらのオブジェクトを作成して組み立て,そのオブジェクトマップをJSONにシーケンス化する必要がある.BoehJSクライアントライブラリは、このJSONを用いて表現され、それを用いて描画を提示する。

空間が許す場合,モデルの属性はインライン方式で表示される.すべてのオブジェクトが下に表示されているわけではない 参考にする もっと細かいことを知っています。

../../_images/objects.png

モデルと属性

低レベルAPIの主なコンポーネントはモデルであり,これらのモデルは自動直列化可能な属性を持つオブジェクトであり,それらをBokehJSモデルに再構成することができる.技術的にはモデルは HasProps ある時点で:

from bokeh.core.properties import HasProps, Int

class Whatever(HasProps):
    """ `Whatever` model. """

モデルは、他のモデルから派生し、共通属性セットの混合を提供することができる(例えば、参照 LineProps 待って、います bokeh.core.property_mixins )。例は、以下のようになる場合がある。

class Another(Whatever, LineProps):
    """ `Another` model. """

モデルは属性を含み,これらの属性はタイプのクラス属性である Property 例えば、:

class IntProps(HasFields):

    prop1 = Int
    prop2 = Int()
    prop3 = Int(10)

The IntProps model represents objects that have three integer values, prop1, prop2, and prop3, that can be automatically serialized from Python, and unserialized by BokehJS.

注釈

厳密には prop1 実例ではありません Int しかし、しかし HasFields 使用自動インスタンス化 Property クラス、したがって prop1 そして prop2 等価な(独立しているが)属性である.これは可読性に有用であり,どのパラメータも属性の構造関数に渡す必要がなければ,後者ではなく前者が第一選択である.

属性タイプは多種多様であり,プリミティブタイプ(例えば:

他の属性をパラメータとした類似容器の属性:

  • List --- for a list of one type of objects: List(Int)

  • Dict --- for a mapping between two type: Dict(String, Double)

最後に専門的なタイプです

  • Instance --- to hold a reference to another model: Instance(Plot)

  • Enum --- to represent enumerated values: Enum("foo", "bar", "baz")

  • Either --- to create a union type: Either(Int, String)

  • Range --- to restrict values to a given range: Instance(Plot)

これらの属性タイプの主な利点は,検証が可能であり,無効なタイプや値の割当てを試みた場合,有意な誤報告が発生する可能性があることである.

警告

ある Any これは他のすべてのタイプの超タイプであり,任意のタイプの値を受け取ることができる.これはすべてのタイプの検証を迂回しているため,慎重に使用することを確保してください(あれば).

bokeh.core.properties もっと細かいことを知っています。

より複雑で、よりリアルなモデル例は、以下のようになる可能性がある。

class Sample(HasProps, FillProps):
    """ `Sample` model. """

    prop1 = Int(127)
    prop2 = Either(Int, List(Int), Dict(String, List(Int)))
    prop3 = Enum("x", "y", "z")
    prop4 = Range(Float, 0.0, 1.0)
    prop5 = List(Instance(Range1d))

特殊な類似属性のタイプがあります Include これにより、プレフィックス混合混合における属性を使用することがより簡単になり、例えば、:

class Includes(HasProps):
    """ `Includes` model. """

    some_props = Include(FillProps)

本例では,占有率属性がある some_props 削除され自動的にすべての属性に置き換えられます FillProps どれもあります some_ 接頭辞として付加される.

注釈

プレフィクスは、有効な識別子であってもよい。もしそれが _props そして、そして props 除去されます足し算 _props 必要ではありませんが属性があれば some 並行して存在している(参照 Plot.title 例えば)。

Vbl.使用 Include これはこう書くことに相当します

class ExplicitIncludes(HasProps):
    """ `ExplicitIncludes` model. """

    some_fill_color = ColorSpec(default="gray")
    some_fill_alpha = DataSpec(default=1.0)

注意してください FillProps この場合には、以下のようにすることもできる。

class IncludesExtends(HasProps, FillProps):
    """ `IncludesExtends` model. """

    some = String
    some_props = Include(FillProps)

しかしこれは

class ExplicitIncludesExtends(HasProps):
    """ `ExplicitIncludesExtends` model. """

    fill_color = ColorSpec(default="gray")
    fill_alpha = DataSpec(default=1.0)
    some = String
    some_fill_color = ColorSpec(default="gray")
    some_fill_alpha = DataSpec(default=1.0)