Bokeh 资料源的更改不会被 push_notebook 实时更新

Bokeh 资料源的更改不会被 push_notebook 实时更新

在本文中,我们将介绍 Bokeh 图表库中一个重要的特性,即在使用 push_notebook 函数时,对数据源进行的更改不会实时更新到图表中。我们将详细说明这个问题,并提供一些示例来说明。

阅读更多:Bokeh 教程

Bokeh 简介

Bokeh 是一个流行的 Python 图表库,用于创建交互式和美观的数据可视化。它支持多种图表类型,包括折线图、柱状图、散点图等,并提供了丰富的配置选项来定制图表的样式和交互功能。

push_notebook 函数的作用

在 Bokeh 中,push_notebook 函数用于将图表实时更新到 Jupyter Notebook 或 JupyterLab 中。通过调用 push_notebook 函数,可以在更改图表数据源后立即更新图表,而无需重新运行整个代码块。

数据源更改不会实时更新的问题

然而,我们在使用 Bokeh 创建图表的过程中可能会遇到一个问题,就是对数据源进行的更改不会实时更新到图表中。这意味着,即使我们通过 push_notebook 函数将图表输出到 Notebook 中,如果在此后更改了数据源,图表本身并不会自动更新。

为了说明这个问题,我们来看一个例子。假设我们运行以下代码:

from bokeh.plotting import figure, show
from bokeh.io import push_notebook
import numpy as np

# 创建一个折线图
p = figure(title="示例图表", x_axis_label="X轴", y_axis_label="Y轴")
r = p.line([], [], line_width=2)

# 将图表实时输出到 Notebook
handle = show(p, notebook_handle=True)

# 初始化数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]

# 更新数据源
r.data_source.data = dict(x=x, y=y)

# 实时更新图表
push_notebook(handle=handle)

代码运行后,会在 Notebook 中显示出一个折线图。然而,如果我们随后更改了数据源中的 x 和 y 数组,图表并不会自动更新。例如,如果我们执行以下代码:

x = np.linspace(0, 10, 100)
y = np.sin(x)

即使我们对 x 和 y 数组进行了更改,由于数据源并未实时更新,图表仍然显示的是之前的数据。

解决方法

为了解决这个问题,我们可以通过重新调用 push_notebook 函数来手动更新图表。以下是相应的修改后的代码:

# 更新数据源
r.data_source.data = dict(x=x, y=y)

# 重新调用 push_notebook 函数更新图表
push_notebook(handle=handle)

这样,当我们更改数据源后,再次调用 push_notebook 函数将会更新图表,显示新的数据。

总结

在 Bokeh 图表库中,使用 push_notebook 函数可以将图表实时输出到 Jupyter Notebook 或 JupyterLab 中。然而,对数据源进行的更改并不会立即更新到图表中,需要手动调用 push_notebook 函数来进行更新。我们可以通过重新将数据源赋值给图形元素的 data_source 属性,并在此后重新调用 push_notebook 函数来实现图表的实时更新。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Bokeh 问答