WebGL加速#
Bokeh 提供了对 WebGL 的有限支持,以便在网页浏览器中渲染图表。例如,在可视化较大数据集时,使用 WebGL 在 Bokeh 中可能非常有用。
WebGL 是一个 JavaScript API,允许在浏览器中使用图形处理单元(GPU)的硬件加速来渲染内容。WebGL 是标准化的,并且在所有现代浏览器中都可用。
如果您使用Bokeh的WebGL输出后端,Bokeh将自动检测浏览器是否支持WebGL。当您在Bokeh图表中使用启用了WebGL的元素但浏览器不支持WebGL时,Bokeh将自动使用默认的canvas渲染器代替。
启用WebGL#
要在Bokeh中启用WebGL,请将绘图的output_backend属性设置为
"webgl":
p = figure(output_backend="webgl")
WebGL输出后端仅支持Bokeh的符号子集。当您启用WebGL时,您是在请求如果可用则使用WebGL渲染。WebGL输出后端中不可用的符号将使用默认的canvas后端进行渲染。
如果您启用了Bokeh的WebGL输出后端,WebGL将在浏览器支持时使用。这包括在Jupyter notebooks或Jupyter lab中的输出,以及当将Bokeh图表导出为PNG时,如果底层浏览器(包括无头浏览器)支持WebGL。
支持的符号#
散点图和其他固定形状的符号#
Bokeh 的 WebGL 支持涵盖以下固定形状的符号:
WebGL 对这些固定形状的符号支持以下属性:
所有 填充属性
除了虚线(将被忽略)之外的所有line properties
除了使用
hatch_extra属性的hatch图像(将被忽略)之外,所有的hatch properties。
线条符号#
对于line()、multi_line()和step()字形,有完整的WebGL支持,尽管带有圆形和方形端帽的虚线外观可能与默认的HTML画布渲染略有不同。
图像字形#
Bokeh 还支持 WebGL image(),
image_rgba() 和 image_stack()
图形符号,但不支持 image_url()。
何时使用WebGL#
一般来说,Bokeh的默认画布输出后端在渲染少于10,000个标记或点时效果良好。对于超过25,000个标记或点的图表,WebGL通常会提供明显更好的性能。通常,渲染的标记或点越多,WebGL相比默认的画布输出后端效率越高。WebGL性能超过画布的标记或点数量取决于可用硬件,因此您需要在自己的硬件上尝试,以找到最适合您的方案。
WebGL 示例#
以下示例是一个启用了WebGL的包含10,000个散点圆的图表。 请注意,即使没有对数据进行下采样,图表也可以平滑地进行平移和缩放。
import numpy as np
from bokeh.plotting import figure, show
N = 10000
x = np.random.normal(0, np.pi, N)
y = np.sin(x) + np.random.normal(0, 0.2, N)
TOOLS = "pan,wheel_zoom,box_zoom,reset,save,box_select"
p = figure(tools=TOOLS, output_backend="webgl")
p.scatter(x, y, alpha=0.1, nonselection_alpha=0.001)
show(p)
同样,下面的图表展示了绘制一条包含10,000个点的单一线条。
import numpy as np
from bokeh.plotting import figure, show
N = 10000
x = np.linspace(0, 10*np.pi, N)
y = np.cos(x) + np.sin(2*x+1.25) + np.random.normal(0, 0.001, (N, ))
p = figure(title="A line consisting of 10k points", output_backend="webgl")
p.line(x, y, color="#22aa22", line_width=3)
show(p)