区域字形#

矩形#

条形#

四边形#

要通过指定 leftrighttopbottom 位置来绘制轴对齐的矩形,请使用 quad() 字形函数

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.quad(top=[2, 3, 4], bottom=[1, 2, 3], left=[1, 2, 3],
       right=[1.2, 2.5, 3.7], color="#B3DE69")

show(p)

#

要通过指定左下角的 xy 坐标以及 widthheight 来绘制轴对齐的矩形,请使用 block() 字形函数

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.block(x=[1, 2, 3], y=[1, 2, 3], width=[0.2, 0.5, 0.1], height=1.5)

show(p)

可旋转#

要通过指定中心坐标、widthheightangle 来绘制任意矩形,请使用 rect() 字形函数

from math import pi

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.rect(x=[1, 2, 3], y=[1, 2, 3], width=0.2, height=40, color="#CAB2D6",
       angle=pi/3, height_units="screen")

show(p)

定向区域#

定向区域是共享公共索引的两个序列之间的填充区域。例如,垂直定向区域有一个 x 坐标数组和两个 y 坐标数组 y1y2,定义了 Bokeh 要填充的空间。

单区域#

要在垂直方向填充区域,请使用 varea() 方法。您可以使用 harea() 在水平方向进行相同的操作。

from bokeh.plotting import figure, show

p = figure(width=400, height=400)

p.varea(x=[1, 2, 3, 4, 5],
        y1=[2, 6, 4, 3, 5],
        y2=[1, 4, 2, 2, 3])

show(p)

堆叠区域#

要堆叠定向区域,请使用 varea_stack()harea_stack() 便利方法。

from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, show

source = ColumnDataSource(data=dict(
    x=[1, 2, 3, 4, 5],
    y1=[1, 2, 4, 3, 4],
    y2=[1, 4, 2, 2, 3],
))
p = figure(width=400, height=400)

p.varea_stack(['y1', 'y2'], x='x', color=("grey", "lightgrey"), source=source)

show(p)

补丁#

单补丁#

以下示例使用 patch() 字形方法从 xy 点的一维序列生成单个多边形补丁

from bokeh.plotting import figure, show

p = figure(width=400, height=400)

# add a patch renderer with an alpha and line width
p.patch([1, 2, 3, 4, 5], [6, 7, 8, 7, 3], alpha=0.5, line_width=2)

show(p)

多补丁#

要绘制多个多边形补丁,请使用 patches() 字形方法

from bokeh.plotting import figure, show

p = figure(width=400, height=400)

p.patches([[1, 3, 2], [3, 4, 6, 6]], [[2, 1, 4], [4, 7, 8, 5]],
          color=["firebrick", "navy"], alpha=[0.8, 0.3], line_width=2)

show(p)

注意

与许多其他字形方法不同,patches() 接受每个线条的 xy 位置的列表的列表。patches() 方法还期望每个补丁的标量值或标量值列表用于颜色、alpha 和线宽等参数。您可以类似地使用 ColumnDataSource,它由点坐标的列表的列表和匹配长度的标量值列表组成。

缺失点#

line()multi_line() 方法一样,您可以将 NaN 值传递给 patch()patches() 字形。这将生成不连续的补丁,其中 NaN 值处存在间隙。

from math import nan

from bokeh.plotting import figure, show

p = figure(width=400, height=400)

# add a patch renderer with NaN values
p.patch([1, 2, 3, nan, 4, 5, 6], [6, 7, 5, nan, 7, 3, 6], alpha=0.5, line_width=2)

show(p)

警告

Bokeh 当前不支持对具有 NaN 值的补丁对象进行命中测试。

多边形#

multi_polygons() 字形使用嵌套来接受与多边形相关的各种信息。该方法复制了 patches() 的功能,但您也可以使用它来渲染多边形内部的孔洞。

注意

与许多其他字形方法不同,multi_polygons() 接受三层嵌套的 xy 位置列表,用于构成每个多边形的外边界和孔洞。multi_polygons() 方法还期望每个项目的标量值或标量值列表用于颜色、alpha 和线宽等参数。您可以类似地使用 ColumnDataSource,它由点坐标的三层嵌套列表和标量值列表组成,其中点坐标的顶层列表与标量值列表的长度相等。

简单多边形#

以下示例使用 multi_polygons() 字形方法从 xy 点的一维序列的三层嵌套列表生成单个多边形。

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.multi_polygons(xs=[[[[1, 1, 2, 2]]]],
                 ys=[[[[3, 4, 4, 3]]]])

show(p)

带孔洞的多边形#

以下示例从 xy 点的三个序列生成一个带孔洞的单个多边形。第一个序列表示多边形的外部边界,随后的序列表示孔洞。

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.multi_polygons(xs=[[[ [1, 2, 2, 1], [1.2, 1.6, 1.6], [1.8, 1.8, 1.6] ]]],
                 ys=[[[ [3, 3, 4, 4], [3.2, 3.6, 3.2], [3.4, 3.8, 3.8] ]]])

show(p)

具有独立部分的多多边形#

单个多边形概念可以包含多个多边形几何图形。以下示例从 xy 点的几个序列生成多多边形字形。序列中的每个项目代表字形的一部分。

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.multi_polygons(xs=[[[ [1, 1, 2, 2], [1.2, 1.6, 1.6], [1.8, 1.8, 1.6] ], [ [3, 4, 3] ]]],
                 ys=[[[ [4, 3, 3, 4], [3.2, 3.2, 3.6], [3.4, 3.8, 3.8] ], [ [1, 1, 3] ]]])

show(p)

多个多多边形#

顶层嵌套将每个多多边形与其余部分分隔开。您可以将每个多多边形视为数据源中的一行,可能带有相应的标签或颜色。

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.multi_polygons(
    xs=[
        [[ [1, 1, 2, 2], [1.2, 1.6, 1.6], [1.8, 1.8, 1.6] ], [ [3, 3, 4] ]],
        [[ [1, 2, 2, 1], [1.3, 1.3, 1.7, 1.7] ]]],
    ys=[
        [[ [4, 3, 3, 4], [3.2, 3.2, 3.6], [3.4, 3.8, 3.8] ], [ [1, 3, 1] ]],
        [[ [1, 1, 2, 2], [1.3, 1.7, 1.7, 1.3] ]]],
    color=['blue', 'red'])

show(p)

条带#

要绘制多个水平或垂直条带(分别为无限宽度或高度的条形),请使用 hstrip()vstrip() 字形方法。这些方法分别接受 y0y1x0x1 坐标分量。请注意,这些字形只能在一个轴中计算边界,因此可能需要在正交轴中明确指定范围,例如,如果单独使用。

from bokeh.io import show
from bokeh.plotting import figure

plot = figure()

plot.hstrip(
    y0=[45, 60, 80],
    y1=[50, 70, 95],
    line_color="pink",
    fill_color="purple",
    hatch_pattern="x", hatch_color="yellow",
)
plot.vstrip(
    x0=[45, 60, 80],
    x1=[50, 70, 95],
    line_color="pink",
    fill_color="yellow",
    hatch_pattern="/", hatch_color="purple",
)

show(plot)

椭圆#

ellipse() 字形方法接受与 rect() 相同的属性,但渲染椭圆形状。

from math import pi

from bokeh.plotting import figure, show

p = figure(width=400, height=400)
p.ellipse(x=[1, 2, 3], y=[1, 2, 3], width=[0.2, 0.3, 0.1], height=0.3,
          angle=pi/3, color="#CAB2D6")

show(p)