首页 > 编程语言 >利用Python与Bokeh创建动态交互数据可视化

利用Python与Bokeh创建动态交互数据可视化

时间:2024-09-14 20:22:46浏览次数:11  
标签:控件 curdoc Python callback Bokeh 可视化 动态数据

Bokeh 是一个用于创建交互式和动态数据可视化的强大工具,它可以帮助你在 Python 中展示数据的变化趋势、模式和关联性。本文将介绍如何使用 Bokeh 库在 Python 中创建动态数据可视化,并提供代码示例以供参考。

Bokeh 简介

Bokeh 是一个开源的 Python 可视化库,它允许用户创建交互式的图表、地图和仪表板。Bokeh 的一个主要优势是它能够在浏览器中直接渲染图形,使得生成的图表可以轻松地与用户交互,并支持大规模数据集的可视化。

安装 Bokeh

首先,你需要安装 Bokeh 库。你可以通过 pip 包管理器来安装:

pip install bokeh

创建动态数据可视化

下面是一个简单的示例,演示了如何使用 Bokeh 创建一个动态的折线图,随着时间的推移不断更新数据。

from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource
from random import randrange
import time

# 创建数据源
source = ColumnDataSource(data={'x': [], 'y': []})

# 创建绘图对象
p = figure(plot_height=300, plot_width=800, title="动态数据可视化",
           x_axis_label='时间', y_axis_label='值')

# 添加线条
p.line(x='x', y='y', source=source, line_width=2)

# 更新数据的回调函数
def update():
    new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
    source.stream(new_data, rollover=200)

# 添加定时器,每秒更新一次数据
curdoc().add_periodic_callback(update, 1000)

curdoc().title = "动态数据可视化示例"

# 显示图表
curdoc().add_root(p)

在这个示例中,我们首先导入必要的模块和函数。然后,我们创建了一个包含 x 和 y 数据的 ColumnDataSource 对象,该对象将用于在 Bokeh 图表中更新数据。接着,我们创建了一个绘图对象 p,设置了图表的标题和轴标签,并添加了一个折线图。然后,我们定义了一个 update() 函数,该函数用于更新数据源中的数据。最后,我们使用 curdoc() 函数添加了一个定时器,以每秒更新一次数据,并将图表显示在当前文档中。

运行代码

保存上述代码到一个 Python 文件中(例如 dynamic_visualization.py),然后在终端中运行:

bokeh serve dynamic_visualization.py

然后,你可以在浏览器中访问 http://localhost:5006/dynamic_visualization 查看动态数据可视化效果。

通过 Bokeh,你可以创建更复杂的动态数据可视化,包括交互式控件、动画效果和更多可视化元素,以满足不同需求。希望本文能帮助你入门 Bokeh,更好地利用 Python 进行数据可视化工作。

自定义动态数据可视化

Bokeh 不仅可以创建简单的动态数据可视化,还可以根据需求进行定制。下面我们将介绍如何添加交互式控件和自定义动画效果。

from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button
from random import randrange
import time

# 创建数据源
source = ColumnDataSource(data={'x': [], 'y': []})

# 创建绘图对象
p = figure(plot_height=300, plot_width=800, title="动态数据可视化",
           x_axis_label='时间', y_axis_label='值')

# 添加线条
line = p.line(x='x', y='y', source=source, line_width=2)

# 更新数据的回调函数
def update():
    new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
    source.stream(new_data, rollover=200)

# 添加定时器,每秒更新一次数据
curdoc().add_periodic_callback(update, 1000)

# 添加交互式按钮
button = Button(label="暂停")

def pause():
    if button.label == "暂停":
        curdoc().remove_periodic_callback(update)
        button.label = "继续"
    else:
        curdoc().add_periodic_callback(update, 1000)
        button.label = "暂停"

button.on_click(pause)

# 添加按钮到文档
curdoc().add_root(button)

curdoc().title = "动态数据可视化示例"

# 显示图表
curdoc().add_root(p)

在这个示例中,我们在原有的动态数据可视化基础上添加了一个交互式按钮。当点击按钮时,图表的更新动作将会暂停或继续。这是通过定义一个 pause() 函数,并将其绑定到按钮的点击事件上实现的。当按钮的标签为“暂停”时,点击按钮将移除定时器回调函数,使得数据更新暂停;当按钮的标签为“继续”时,点击按钮将重新添加定时器回调函数,继续数据更新。

通过 Bokeh,你可以根据具体需求添加更多的交互式控件和自定义动画效果,以创建更丰富、更有趣的动态数据可视化。希望本文能帮助你进一步探索 Bokeh 库的强大功能,为数据可视化工作增添更多乐趣和灵活性。

添加动画效果和定制控件

Bokeh 提供了丰富的工具和选项,使得动态数据可视化可以更加生动和交互。下面我们将进一步定制化动态可视化,添加动画效果和定制控件。

from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button, Slider
from random import randrange
import time

# 创建数据源
source = ColumnDataSource(data={'x': [], 'y': []})

# 创建绘图对象
p = figure(plot_height=300, plot_width=800, title="动态数据可视化",
           x_axis_label='时间', y_axis_label='值')

# 添加线条
line = p.line(x='x', y='y', source=source, line_width=2)

# 更新数据的回调函数
def update():
    new_data = {'x': [time.time()], 'y': [randrange(1, 100)]}
    source.stream(new_data, rollover=200)

# 添加定时器,每秒更新一次数据
callback_id = curdoc().add_periodic_callback(update, 1000)

# 添加交互式按钮
button = Button(label="暂停/继续")

def pause_resume():
    if button.label == "暂停":
        curdoc().remove_periodic_callback(callback_id)
        button.label = "继续"
    else:
        callback_id = curdoc().add_periodic_callback(update, 1000)
        button.label = "暂停"

button.on_click(pause_resume)

# 添加滑块控件,用于调节更新频率
slider = Slider(start=100, end=2000, value=1000, step=100, title="更新频率 (毫秒)")

def update_interval(attrname, old, new):
    curdoc().remove_periodic_callback(callback_id)
    callback_id = curdoc().add_periodic_callback(update, slider.value)

slider.on_change('value', update_interval)

# 添加控件到文档
curdoc().add_root(button)
curdoc().add_root(slider)

curdoc().title = "动态数据可视化示例"

# 显示图表
curdoc().add_root(p)

在这个示例中,我们在原有的动态数据可视化基础上添加了一个滑块控件,用于调节数据更新的频率。当滑块的值发生变化时,将会重新设置定时器的间隔时间,实现动态更新频率的调节。

通过 Bokeh 的丰富功能和灵活性,你可以根据具体需求添加更多的动画效果和交互式控件,创建更具吸引力和实用性的动态数据可视化。希望本文能够激发你对 Bokeh 库的探索和创造力,为数据可视化领域带来更多新的可能性。

添加更多数据可视化元素和交互式控件

Bokeh 不仅支持基本的图形元素,还支持添加更多高级的数据可视化元素和交互式控件,使得可视化效果更加丰富和生动。下面我们将进一步定制动态数据可视化,添加更多元素和控件。

from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Button, Slider, Select
from bokeh.layouts import column
from random import randrange
import time

# 创建数据源
source = ColumnDataSource(data={'x': [], 'y': [], 'color': []})

# 创建绘图对象
p = figure(plot_height=300, plot_width=800, title="动态数据可视化",
           x_axis_label='时间', y_axis_label='值')

# 添加散点图和线条
scatter = p.scatter(x='x', y='y', color='color', source=source, size=8, legend_label="数据点")
line = p.line(x='x', y='y', source=source, line_width=2, line_color='blue', legend_label="折线")

# 更新数据的回调函数
def update():
    new_data = {'x': [time.time()], 'y': [randrange(1, 100)], 'color': ['red']}
    source.stream(new_data, rollover=200)

# 添加定时器,每秒更新一次数据
callback_id = curdoc().add_periodic_callback(update, 1000)

# 添加交互式按钮
button = Button(label="暂停/继续")

def pause_resume():
    if button.label == "暂停":
        curdoc().remove_periodic_callback(callback_id)
        button.label = "继续"
    else:
        callback_id = curdoc().add_periodic_callback(update, 1000)
        button.label = "暂停"

button.on_click(pause_resume)

# 添加滑块控件,用于调节更新频率
slider = Slider(start=100, end=2000, value=1000, step=100, title="更新频率 (毫秒)")

def update_interval(attrname, old, new):
    curdoc().remove_periodic_callback(callback_id)
    callback_id = curdoc().add_periodic_callback(update, slider.value)

slider.on_change('value', update_interval)

# 添加下拉菜单控件,用于选择数据点颜色
color_select = Select(title="数据点颜色:", value="red", options=["red", "blue", "green"])

def update_color(attrname, old, new):
    source.data['color'] = [new]

color_select.on_change('value', update_color)

# 添加控件到布局
controls = column(button, slider, color_select)
layout = column(controls, p)

curdoc().add_root(layout)
curdoc().title = "动态数据可视化示例"

在这个示例中,我们在原有的动态数据可视化基础上添加了一个下拉菜单控件,用于选择数据点的颜色。通过选择不同的颜色,用户可以更直观地区分不同的数据点。

通过 Bokeh 的强大功能和灵活性,你可以根据具体需求添加更多元素和控件,定制出更丰富、更具交互性的动态数据可视化。希望本文能够启发你对 Bokeh 库的探索和创造力,为数据可视化领域带来更多新的想法和实践。

总结

在本文中,我们探讨了如何利用 Bokeh 库在 Python 中创建动态数据可视化。首先,我们介绍了 Bokeh 的基本概念和优势,以及如何安装 Bokeh 库。然后,我们提供了几个代码示例,演示了如何创建简单的动态折线图,并添加了交互式控件,如按钮和滑块,以调节数据更新频率。接着,我们进一步定制了动态可视化,添加了更多的元素和控件,如散点图和下拉菜单,以实现更丰富的交互体验。

通过 Bokeh,你可以轻松创建具有吸引力和实用性的动态数据可视化,展示数据的变化趋势和关联性,同时为用户提供交互式控件,使得用户可以自定义数据的展示方式。希望本文能够帮助你更好地利用 Bokeh 库进行数据可视化工作,提升数据分析和展示的效率和效果。

利用Python与Bokeh创建动态交互数据可视化_ide

标签:控件,curdoc,Python,callback,Bokeh,可视化,动态数据
From: https://blog.51cto.com/u_16123336/12018634

相关文章

  • 基于Python+数据可视化大屏+大数据爬虫的短视频内容理解与可视化推荐平台设计和实现(
    博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P......
  • python第二次课(python基础)
    Python注释单行注释:只能注释一行内容单行注释使用#多行注释:可以注释多行内容多行注释使用三个单引号或者三个双引号都可以文档注释:注释可以生成文档,一般不允许压缩。使用的多行注释,只是有特定的要求字符串的重复问题在python中可以使用*来表示字符串的重复次数,乘数......
  • 基础python超级常用的四种可视化函数库
    可视化的概念可视化是指将数据或信息转换为图形表示形式的过程,以便更容易理解和分析。通过可视化,可以将复杂的概念、大量数据或抽象信息转化为直观的图形,使人们能够更快地洞察数据中的模式、趋势和异常情况。数据可视化是数据科学、统计学、信息设计等多个领域的交叉学科,它不......
  • 入门级小白超实用的python爬虫爬取网页图片
    图像作为信息传播的重要载体,在日常生活和各行各业的应用越来越广泛。网络图片爬取成为了数据挖掘和分析领域的一项重要技术。本文将探讨在网络环境中爬取图片的实现步骤以及代码。效果展示代码运行后,输入关健字等待片刻后桌面会自动创建一个名为picture的文件夹随后开始爬......
  • Python基础语法(2)
    顺序语句默认情况下,Python的代码执行顺序是按照从上到下的顺序,依次执行的print("1")print("2")print("3")执行结果一定为“123”,而不会出现“321”或者“132” 等,这种按照顺序执行的代码,我们称为顺序语句这个顺序是很关键的,编程是一件明确无歧义的事情,安排......
  • Python基础语法(1)下
    输入输出和用户交互程序需要和用户进行交互。用户把信息传递给程序的过程,称为"输入",也就是用户给计算机下命令就叫做输入。程序把结果展示给用户的过程,称为"输出",也就是计算机在向用户汇报工作。输入输出的最基本的方法就是控制台,用户通过控制台输入一些字符串,程序再通......
  • Python的Scapy库详解
    目录前言一、Scapy简介二、基本功能1.构建数据包2.发送与接收数据包3.捕获数据包三、高级功能1.协议栈与数据包叠加2.网络扫描3.数据包注入与攻击模拟四、应用场景五、总结前言Python的Scapy库是一个强大且灵活的网络数据包处理库,常用于网络安全、渗透测......
  • 什么是智慧园区监控?详解数据可视化大屏在智慧园区监控中的应用
    随着科技的不断进步,智慧园区的概念逐渐成为现实。它们不仅仅是建筑物和空间的集合,而是通过智能技术实现高效、安全、可持续运营的现代化社区。在本文中,我们将探索智慧园区的内涵、优势,揭示可视化大屏是如何实现智慧园区的资源高效利用、安防健康运作、环境智能监测,为园区管理者......
  • 基于python+flask框架的农民工综合信息管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着我国城市化进程的加速推进,农民工群体作为城市建设的重要力量,其规模日益庞大,对社会经济发展起到了不可替代的作用。然而,农民工的流动性......
  • 基于python+flask框架的社区公共卫生疫情防控管理系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着全球公共卫生事件的频发,特别是新冠疫情的爆发,社区作为疫情防控的第一线,其公共卫生管理能力直接关乎到疫情控制的成效与居民的生命安全......