线和曲线#
单条线#
下面的示例展示了如何使用line()
图元方法从一维x
和y
点序列生成单个线图元。
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
# add a line renderer
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2)
show(p)
阶梯线#
对于某些类型的数据,数据点之间的离散阶梯可能比线性段更有效。要生成这种类型的数据表示,请使用step()
图元方法。
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
# add a steps renderer
p.step([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2, mode="center")
show(p)
调整mode
参数以在每个阶梯的前面、后面或中间绘制阶梯水平。
多条线#
如果要一次绘制多条线,请按如下方式使用multi_line()
图元方法
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
p.multi_line([[1, 3, 2], [3, 4, 6, 6]], [[2, 1, 4], [4, 7, 8, 5]],
color=["firebrick", "navy"], alpha=[0.8, 0.3], line_width=4)
show(p)
注意
与许多其他图元方法不同,multi_line()
接受每条线的x
和y
位置的列表列表。 multi_line()
方法还为每条线的颜色、alpha和线宽等参数期望一个标量值或标量列表。您可以类似地使用一个ColumnDataSource
,它包含点坐标的列表列表和长度匹配的标量值的列表。
缺失点#
您可以将NaN
值传递给line()
和multi_line()
图元。这会生成具有间隙的断开线,用于NaN
值。
from math import nan
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
# add a line renderer with NaN values
p.line([1, 2, 3, nan, 4, 5], [6, 7, 2, 4, 4, 5], line_width=2)
show(p)
堆叠线#
在处理百分比和其他类似数据的时间序列时,您可能希望堆叠具有共同索引的线。为此,您可以使用vline_stack()
和hline_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.vline_stack(['y1', 'y2'], x='x', source=source)
show(p)
注意
本章中的此示例和其他示例都依赖于ColumnDataSource
进行数据结构化。有关如何使用此数据结构的信息,请参阅数据源。
与标记结合#
您可以通过在单个figure()
上调用其方法来组合单个绘图上的多个图元。
from bokeh.plotting import figure, show
x = [1, 2, 3, 4, 5]
y = [6, 7, 8, 7, 3]
p = figure(width=400, height=400)
# add both a line and circles on the same plot
p.line(x, y, line_width=2)
p.scatter(x, y, fill_color="white", size=8)
show(p)
此原则适用于所有bokeh.plotting图元方法。您可以根据需要向Bokeh绘图添加任意数量的图元。
专用图元#
线段#
要绘制多个单独的线段,请使用segment()
和ray()
图元方法。
segment()
方法接受起始点x0
和y0
以及终点x1
和y1
。它在这些点之间渲染线段。
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
p.segment(x0=[1, 2, 3], y0=[1, 2, 3], x1=[1.2, 2.4, 3.1],
y1=[1.2, 2.5, 3.7], color="#F4A582", line_width=3)
show(p)
射线#
ray()
方法接受具有length
(以屏幕单位为单位)和angle
的起始点x
和y
。 angle_units
参数默认为"rad"
,但您也可以将其设置为"deg"
,以便以度而不是弧度测量角度。要获得始终延伸到绘图边缘的“无限”射线,请将length
设置为0
。
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
p.ray(x=[1, 2, 3], y=[1, 2, 3], length=45, angle=[30, 45, 60],
angle_units="deg", color="#FB8072", line_width=2)
show(p)
跨度#
要绘制多个水平或垂直跨度(分别为无限宽度或高度的线),请使用hspan()
或vspan()
图元方法。这些方法分别接受y
或x
坐标分量。请注意,这些图元只能在一个轴上计算边界,因此可能需要在正交轴上进行显式范围指定,例如,如果单独使用。
from bokeh.io import show
from bokeh.plotting import figure
plot = figure()
plot.hspan(
y=[0, 5, 15, 33],
line_width=[1, 2, 3, 4], line_color="red",
)
plot.vspan(
x=[0, 5, 15, 33],
line_width=[1, 2, 3, 4], line_color="blue",
)
show(plot)
弧线#
要绘制简单的线弧,请使用arc()
图元方法,该方法接受radius
、start_angle
和end_angle
来确定位置。此外,direction
属性确定是在起始角和结束角之间顺时针("clock"
)还是逆时针("anticlock"
)渲染。
from bokeh.plotting import figure, show
p = figure(width=400, height=400)
p.arc(x=[1, 2, 3], y=[1, 2, 3], radius=0.1, start_angle=0.4, end_angle=4.8, color="navy")
show(p)
参数化#
要绘制参数化的二次和三次曲线,请使用quadratic()
和bezier()
图元方法。有关这些曲线的更多详细信息,请参阅参考文档。