欢迎访问宙启技术站
智能推送

在Python中使用Bokeh绘制动态图表

发布时间:2023-12-23 04:03:00

在Python中使用Bokeh库绘制动态图表是一种简单而强大的方式来展示数据的变化。Bokeh是一个交互式可视化库,可以创建各种类型的图表,包括折线图、散点图、柱状图等。使用Bokeh绘制动态图表的过程包括创建数据集、创建图表对象和显示数据。下面是一个使用Bokeh绘制动态折线图的示例。

首先,我们需要导入必要的库:

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, LinearAxis, Range1d
from bokeh.io import curdoc
from bokeh.layouts import column
from random import randint
from time import sleep

然后,我们创建一个数据集,包含x和y坐标的列表。这个列表可以是需要展示的任何数据,例如温度、股票价格或传感器读数。

x = [0]
y = [0]

接下来,我们需要创建一个图表对象。在这个示例中,我们使用figure()函数创建一个折线图,并设置标题、x和y轴标签。

plot = figure(title="Dynamic Line Graph", x_axis_label='X', y_axis_label='Y')

然后,我们将数据添加到图表对象中,并创建一个数据源对象。

source = ColumnDataSource(data=dict(x=x, y=y))
plot.line('x', 'y', source=source, line_width=2)

接下来,我们定义一个更新函数,用于更新数据。在这个示例中,我们将随机生成一个新的数据点,并将其附加到数据集中。

def update():
    new_x = source.data['x'][-1] + 1
    new_y = source.data['y'][-1] + randint(-5, 5)
    source.stream(dict(x=[new_x], y=[new_y]))

最后,我们使用curdoc().add_periodic_callback()函数来定期调用更新函数。

curdoc().add_periodic_callback(update, 1000) #每隔1秒钟执行一次更新函数

最后,我们使用show()函数将图表对象显示在浏览器中。

show(plot)

完整的代码如下所示:

from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, LinearAxis, Range1d
from bokeh.io import curdoc
from bokeh.layouts import column
from random import randint
from time import sleep

x = [0]
y = [0]

plot = figure(title="Dynamic Line Graph", x_axis_label='X', y_axis_label='Y')

source = ColumnDataSource(data=dict(x=x, y=y))
plot.line('x', 'y', source=source, line_width=2)

def update():
    new_x = source.data['x'][-1] + 1
    new_y = source.data['y'][-1] + randint(-5, 5)
    source.stream(dict(x=[new_x], y=[new_y]))

curdoc().add_periodic_callback(update, 1000)

show(plot)

运行以上代码,将会在浏览器中显示一个动态折线图,每隔1秒钟更新一次数据点。您可以根据自己的需求修改更新函数,以便通过不同的方式生成新的数据点。

使用Bokeh绘制动态图表是一种简单而强大的方式来展示数据的变化。Bokeh提供了许多其他类型的图表,以及更多的交互功能,例如缩放、平移和选择。您可以参考Bokeh的官方文档,了解更多关于Bokeh的功能和用法。