第一步 1:创建折线图#

只需几行 Python 代码,Bokeh 就能让你创建交互式的、基于 JavaScript 的可视化效果,并在 Web 浏览器中显示。

Bokeh 的基本思想是一个两步过程:首先,你从 Bokeh 的构建块中选择来创建你的可视化效果。其次,你自定义这些构建块以满足你的需求。

为此,Bokeh 结合了两个要素

  • 一个 Python 库,用于定义可视化内容和交互功能。

  • 一个名为 BokehJS 的 JavaScript 库,在后台工作以在 Web 浏览器中显示你的交互式可视化效果。

基于你的 Python 代码,Bokeh 会自动为你生成所有必要的 JavaScript 和 HTML 代码。在默认设置下,Bokeh 会自动从 Bokeh 的 CDN(内容分发网络)加载任何额外的 JavaScript 代码。

Bokeh 的文档包含多个部分,包括包含详细解释和示例的用户指南参考指南,后者系统地描述了 Bokeh 的每个元素。在本指南中,你将找到指向这两个资源的链接。

注意

“第一步”部分中的所有代码都可以作为标准 Python 脚本运行。运行时,这些脚本将创建可在 Web 浏览器中查看的 HTML 输出。

创建简单的折线图#

你的第一个可视化效果将是一个带有单条线的图表,如下所示

即使像这样的简单图表也具有交互功能。使用图表右侧的工具进行探索

  • 表示平移工具的图标 使用**平移工具**在图表中移动图形。

  • 表示框选缩放的图标 使用**框选缩放工具**放大图表中的某个区域。

  • 表示滚轮缩放的图标 使用**滚轮缩放工具**使用鼠标滚轮放大和缩小。

  • 表示保存工具的图标 使用**保存工具**将当前视图的图表导出为 PNG 文件。

  • 表示重置工具的图标 使用**重置工具**将视图恢复到图表的默认设置。

  • 帮助符号 使用**帮助符号**了解 Bokeh 中可用的工具。

按照以下步骤重新创建这个简单的折线图

  1. 在你的计算机上创建一个新的 Python 文件(例如 simple_line_chart.py),并在你选择的代码编辑器(如Sublime TextVisual Studio Code等)中打开它。

  1. 作为新 Python 脚本的第一行,从bokeh.plotting模块导入必要的函数

    from bokeh.plotting import figure, show
    
  2. 定义两个包含折线图数据的列表

    # prepare some data
    x = [1, 2, 3, 4, 5]
    y = [6, 7, 2, 4, 5]
    
  3. 使用figure()函数创建图表。传递以下参数

    • title:折线图的标题(可选)

    • x_axis_label:要在图表 x 轴上放置的文本标签(可选)

    • y_axis_label:要在图表 y 轴上放置的文本标签(可选)

    # create a new plot with a title and axis labels
    p = figure(title="Simple line example", x_axis_label='x', y_axis_label='y')
    
  4. 使用line()函数向刚创建的图表中添加折线图。传递以下参数

    • 包含数据的列表xy

    • legend_label:用于标记折线图的字符串(可选)

    • line_width:定义线宽(以像素为单位,可选)

    # add a line renderer with legend and line thickness to the plot
    p.line(x, y, legend_label="Temp.", line_width=2)
    
  5. 最后,使用show()函数生成图表并在 Web 浏览器中打开生成的 HTML 文件。

    # show the results
    show(p)
    
  6. 从命令行运行刚创建的 Python 脚本。例如

    python simple_line_chart.py
    

执行这些代码行时,Bokeh 会创建一个输出文件"lines.html"。Bokeh 还会打开浏览器以显示它。

这是折线图的完整代码应有的样子

from bokeh.plotting import figure, show

# prepare some data
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# create a new plot with a title and axis labels
p = figure(title="Simple line example", x_axis_label="x", y_axis_label="y")

# add a line renderer with legend and line thickness
p.line(x, y, legend_label="Temp.", line_width=2)

# show the results
show(p)

组合多个图表#

使用 Bokeh 的bokeh.plotting接口,可以向图表中添加更多图形。

要向图表中添加更多折线图,只需多次调用line()函数。

首先,添加更多数据作为其他图形的基础

# prepare some data
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [2, 3, 4, 5, 6]
y3 = [4, 5, 5, 7, 2]

接下来,通过更改figure()函数中title参数的字符串来更新图表的标题

# create a new plot with a title and axis labels
p = figure(title="Multiple line example", x_axis_label='x', y_axis_label='y')

最后,添加对line()函数的更多调用

# add multiple renderers
p.line(x, y1, legend_label="Temp.", color="blue", line_width=2)
p.line(x, y2, legend_label="Rate", color="red", line_width=2)
p.line(x, y3, legend_label="Objects", color="green", line_width=2)

在此示例中,你还通过向每条线的color参数传递不同的命名颜色来为每条线分配不同的颜色。

这是多线图表的完整代码应有的样子

from bokeh.plotting import figure, show

# prepare some data
x = [1, 2, 3, 4, 5]
y1 = [6, 7, 2, 4, 5]
y2 = [2, 3, 4, 5, 6]
y3 = [4, 5, 5, 7, 2]

# create a new plot with a title and axis labels
p = figure(title="Multiple line example", x_axis_label="x", y_axis_label="y")

# add multiple renderers
p.line(x, y1, legend_label="Temp.", color="blue", line_width=2)
p.line(x, y2, legend_label="Rate", color="red", line_width=2)
p.line(x, y3, legend_label="Objects", color="green", line_width=2)

# show the results
show(p)

回顾:构建可视化效果#

你刚刚完成了使用 Bokeh 的bokeh.plotting接口创建大多数基本可视化效果所需的所有基本步骤

  1. 准备数据

    你使用了普通的 Python 列表,但其他形式的序列化数据也可以使用。

  2. 调用figure()函数

    这将创建一个具有最常见默认选项的图表。你可以自定义图表的各种属性,例如标题、工具和轴标签。

  3. 添加渲染器

    你使用line()创建了一条线。渲染器具有各种选项,允许你指定视觉属性,例如颜色、图例和宽度。

  4. 请求 Bokehshow()save()结果

    这些函数要么将图表保存到 HTML 文件,要么在浏览器中显示它。