WebGL 加速#
Bokeh 提供了有限的 WebGL 支持,用于在 Web 浏览器中渲染绘图。在可视化大型数据集时,使用 Bokeh 中的 WebGL 可能会有用,例如。
WebGL 是一个 JavaScript API,允许使用图形处理单元 (GPU) 的硬件加速在浏览器中渲染内容。WebGL 是一种标准,可在所有现代浏览器中使用。
如果您使用 Bokeh 的 WebGL 输出后端,Bokeh 会自动检测浏览器是否支持 WebGL。当您在 Bokeh 绘图中使用支持 WebGL 的元素,但浏览器不支持 WebGL 时,Bokeh 会自动使用默认的画布渲染器。
启用 WebGL#
要在 Bokeh 中启用 WebGL,请将绘图的 output_backend
属性设置为 "webgl"
p = figure(output_backend="webgl")
WebGL 输出后端仅支持 Bokeh 符号的一个子集。当您启用 WebGL 时,您是在请求使用 WebGL 渲染(如果可用)。在 WebGL 输出后端中不可用的符号将使用默认的画布后端渲染。
如果您启用了 Bokeh 的 WebGL 输出后端,则 WebGL 将在浏览器支持时使用。这包括在 Jupyter 笔记本或 Jupyter lab 中输出,以及在 将 Bokeh 绘图导出为 PNG 时(如果底层浏览器(包括无头浏览器)支持 WebGL)。
支持的符号#
散点图和其他固定形状符号#
Bokeh 的 WebGL 支持涵盖以下固定形状符号
对这些固定形状符号的 WebGL 支持涵盖以下属性
线条符号#
对 line()
、multi_line()
和 step()
符号有完全的 WebGL 支持,尽管带有圆形和方形端盖的虚线的显示可能与默认的 HTML 画布渲染略有不同。
图像符号#
Bokeh 还支持 WebGL image()
、image_rgba()
和 image_stack()
符号,但不支持 image_url()
。
何时使用 WebGL#
一般经验法则是,如果您要渲染少于 10,000 个标记或点,则 Bokeh 的默认画布输出后端效果很好。对于具有超过 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)