Python中的动态数据可视化Bokeh库实战

👽发现宝藏

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。

Python 中的动态数据可视化Bokeh库实战

在数据科学和可视化领域,动态数据可视化是一项关键技术,能够帮助数据科学家和分析师更好地理解数据、发现趋势,并与观众交互。Python 中有许多强大的库用于数据可视化,其中 Bokeh 就是一款备受推崇的工具之一。Bokeh 提供了丰富的功能和灵活性,使得用户可以轻松创建动态、交互式的数据可视化。

什么是 Bokeh?

Bokeh 是一个交互式可视化库,用于创建漂亮而且具有高度交互性的绘图。它专注于在现代 Web 浏览器中展示数据,并支持用于构建交互式应用程序的动态数据可视化。Bokeh 的设计理念是通过将数据转换为可视化元素(如图形、图表等),使用户能够通过交互方式进行探索和理解数据。

安装 Bokeh

要开始使用 Bokeh,首先需要安装它。可以使用 pip 进行安装:

pip install bokeh

Bokeh 的基本概念

在深入探讨 Bokeh 库之前,让我们先了解一些 Bokeh 的基本概念:

  1. Plot(绘图):Plot 是 Bokeh 中的核心对象,用于创建数据可视化。一个 Plot 可以包含多个 Glyph(几何图形)对象,用于表示数据的不同方面。

  2. Glyph(几何图形):Glyph 是 Plot 中的基本图形元素,用于表示数据。常见的 Glyph 包括点、线、矩形等。

  3. 数据源:Bokeh 中的数据源是用于存储数据的对象。数据源可以是 Python 字典、Pandas DataFrame 等。

  4. 工具:Bokeh 提供了许多工具,用于与绘图进行交互,如缩放、平移、选择等。

使用 Bokeh 创建动态数据可视化

现在让我们通过一个简单的示例来演示如何使用 Bokeh 创建动态数据可视化。假设我们有一个包含时间序列数据的 Pandas DataFrame,我们想要将这些数据可视化为动态折线图,并添加一些交互性工具。

import pandas as pd
from bokeh.plotting import figure, output_file, show
from bokeh.models import ColumnDataSource, HoverTool

# 创建一个示例数据集
data = {
    'date': pd.date_range(start='2024-01-01', periods=10),
    'value': [3, 7, 8, 4, 5, 6, 7, 8, 12, 10]
}
df = pd.DataFrame(data)

# 创建数据源
source = ColumnDataSource(df)

# 创建绘图对象
p = figure(title="动态数据可视化示例", x_axis_label='日期', y_axis_label='数值')

# 添加折线图
p.line(x='date', y='value', source=source, line_width=2)

# 添加交互工具
hover = HoverTool()
hover.tooltips = [("数值", "@value"), ("日期", "@date{%F}")]
hover.formatters = {'@date': 'datetime'}
p.add_tools(hover)

# 输出到 HTML 文件
output_file("dynamic_plot.html")

# 显示绘图
show(p)

在这个示例中,我们首先创建了一个包含时间序列数据的 Pandas DataFrame。然后,我们使用 ColumnDataSource 将 DataFrame 转换为 Bokeh 的数据源对象。接下来,我们创建了一个绘图对象 p,并使用 line() 方法添加了折线图。最后,我们使用 HoverTool 添加了一个悬停工具,当用户将鼠标悬停在数据点上时,会显示相应的数值和日期信息。最终,我们将绘图输出到 HTML 文件,并通过 show() 函数显示在浏览器中。

通过 Bokeh,我们可以轻松创建具有丰富交互性的动态数据可视化,让用户能够更好地探索和理解数据。

高级功能和定制化

除了基本功能之外,Bokeh还提供了许多高级功能和定制化选项,使用户能够创建出更加复杂和精美的可视化效果。

1. 添加更多的图形元素

除了折线图之外,Bokeh还支持添加其他类型的图形元素,如散点图、柱状图、区域图等。用户可以根据自己的需求选择合适的图形元素来呈现数据。

# 添加散点图
p.circle(x='date', y='value', source=source, size=8, color='red', alpha=0.5)

# 添加柱状图
p.vbar(x='date', top='value', source=source, width=0.5, color='blue', alpha=0.5)
2. 自定义样式和布局

Bokeh允许用户对绘图的样式和布局进行高度定制。用户可以调整图形的颜色、线型、填充色等属性,以及标题、标签、图例等元素的样式和位置。

# 调整标题样式
p.title.text_font_size = '16pt'
p.title.align = 'center'

# 调整坐标轴样式
p.xaxis.axis_label_text_color = 'blue'
p.yaxis.axis_label_text_color = 'green'
3. 添加交互性工具

除了悬停工具之外,Bokeh还提供了许多其他交互性工具,如缩放、平移、选择、放大镜等。用户可以根据需要添加这些工具,以增强用户与数据可视化的交互性。

# 添加缩放工具
from bokeh.models import WheelZoomTool
p.add_tools(WheelZoomTool())

# 添加选择工具
from bokeh.models import BoxSelectTool
p.add_tools(BoxSelectTool())
4. 创建交互式应用程序

Bokeh不仅可以用于创建静态的数据可视化,还可以用于构建动态的交互式应用程序。用户可以使用 Bokeh 提供的服务器功能,将数据可视化部署到 Web 服务器上,并实现与用户的实时交互。

from bokeh.io import curdoc

# 将绘图对象添加到文档
curdoc().add_root(p)

交互性的用户界面

Bokeh 的一个强大功能是可以创建交互式的用户界面(UI),让用户能够动态地探索数据并进行自定义操作。下面是一个简单的例子,演示了如何使用 Bokeh 创建一个具有滑动条和按钮的交互式应用程序,用户可以通过滑动条调整数据的范围,然后点击按钮更新可视化图表。

from bokeh.layouts import column
from bokeh.models import Slider, Button
from bokeh.events import ButtonClick
from bokeh.io import curdoc
import numpy as np

# 创建随机数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

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

# 创建绘图对象
plot = figure(title="动态数据可视化示例", plot_width=600, plot_height=400)
plot.line('x', 'y', source=source, line_width=2)

# 创建滑动条和按钮
slider = Slider(start=0, end=10, value=10, step=0.1, title="范围")
button = Button(label="更新")

# 定义更新数据的回调函数
def update_data(event):
    new_x = np.linspace(0, slider.value, 100)
    new_y = np.sin(new_x)
    source.data = {'x': new_x, 'y': new_y}

# 绑定按钮点击事件
button.on_event(ButtonClick, update_data)

# 将组件添加到布局
layout = column(slider, button, plot)
curdoc().add_root(layout)

在这个例子中,我们首先创建了一个包含正弦函数数据的数据源。然后,我们创建了一个绘图对象,并添加了一条正弦曲线。接下来,我们创建了一个滑动条和一个按钮,并定义了按钮点击事件的回调函数。在回调函数中,我们根据滑动条的值生成新的数据,并更新数据源。最后,我们将滑动条、按钮和绘图对象添加到一个垂直布局中,并将布局添加到文档中。

通过这个交互式应用程序,用户可以通过调整滑动条的值来改变数据的范围,然后点击按钮更新图表,从而实现动态数据可视化。

高级功能和定制化

除了基本功能之外,Bokeh还提供了许多高级功能和定制化选项,使用户能够创建出更加复杂和精美的可视化效果。

1. 添加更多的图形元素

除了折线图之外,Bokeh还支持添加其他类型的图形元素,如散点图、柱状图、区域图等。用户可以根据自己的需求选择合适的图形元素来呈现数据。

# 添加散点图
p.circle(x='date', y='value', source=source, size=8, color='red', alpha=0.5)

# 添加柱状图
p.vbar(x='date', top='value', source=source, width=0.5, color='blue', alpha=0.5)
2. 自定义样式和布局

Bokeh允许用户对绘图的样式和布局进行高度定制。用户可以调整图形的颜色、线型、填充色等属性,以及标题、标签、图例等元素的样式和位置。

# 调整标题样式
p.title.text_font_size = '16pt'
p.title.align = 'center'

# 调整坐标轴样式
p.xaxis.axis_label_text_color = 'blue'
p.yaxis.axis_label_text_color = 'green'
3. 添加交互性工具

除了悬停工具之外,Bokeh还提供了许多其他交互性工具,如缩放、平移、选择、放大镜等。用户可以根据需要添加这些工具,以增强用户与数据可视化的交互性。

# 添加缩放工具
from bokeh.models import WheelZoomTool
p.add_tools(WheelZoomTool())

# 添加选择工具
from bokeh.models import BoxSelectTool
p.add_tools(BoxSelectTool())
4. 创建交互式应用程序

Bokeh不仅可以用于创建静态的数据可视化,还可以用于构建动态的交互式应用程序。用户可以使用 Bokeh 提供的服务器功能,将数据可视化部署到 Web 服务器上,并实现与用户的实时交互。

from bokeh.io import curdoc

# 将绘图对象添加到文档
curdoc().add_root(p)

数据链接和数据更新

在实际应用中,数据往往是动态变化的。Bokeh 提供了一些机制来处理数据的链接和更新,以确保可视化能够及时反映数据的变化。

1. 数据链接

Bokeh 支持将数据源与图形元素进行链接,这样当数据源中的数据发生变化时,图形元素会自动更新以反映这些变化。

# 创建数据源
source = ColumnDataSource(df)

# 创建绘图对象
p = figure(title="动态数据可视化示例", x_axis_label='日期', y_axis_label='数值')

# 添加折线图,并链接数据源
p.line(x='date', y='value', source=source, line_width=2)
2. 数据更新

当数据源中的数据发生变化时,可以通过修改数据源的数据来更新可视化图表。Bokeh 会自动检测数据的变化并更新图形元素。

# 更新数据源中的数据
new_data = {
    'date': pd.date_range(start='2024-01-01', periods=10),
    'value': [5, 8, 6, 9, 7, 8, 10, 12, 11, 13]
}
source.data = new_data
3. 数据流和实时更新

对于需要实时更新的数据,Bokeh 还提供了数据流(Streaming)的功能,可以将新的数据流式传输到可视化图表中,实现实时更新的效果。

from bokeh.models import DataStream, CustomJS

# 创建数据流
stream = DataStream(data=dict(x=[], y=[]))

# 创建绘图对象
p = figure(title="实时数据流可视化示例", x_axis_label='时间', y_axis_label='数值')

# 添加折线图,并链接数据流
p.line('x', 'y', source=stream, line_width=2)

# 定义 JavaScript 回调函数,用于更新数据流
callback = CustomJS(args=dict(stream=stream), code="""
    // 生成新的数据点
    var new_x = Date.now();
    var new_y = Math.random();
    
    // 将新数据点添加到数据流中
    stream.data.x.push(new_x);
    stream.data.y.push(new_y);
    
    // 触发数据更新
    stream.change.emit();
""")

# 将 JavaScript 回调函数与定时器绑定,实现实时更新
interval = 1000; // 每秒更新一次
callback.args['interval'] = interval;
callback_code = "setInterval(function() {" + callback.code + "}, " + interval + ");"
callback.code = callback_code

# 添加 JavaScript 回调函数到绘图对象
p.js_on_event('document_ready', callback)

总结

总的来说,本文介绍了 Bokeh 库在 Python 中动态数据可视化方面的应用。首先,我们了解了 Bokeh 的基本概念和功能,包括 Plot、Glyph、数据源以及交互性工具等。然后,我们演示了如何使用 Bokeh 创建动态数据可视化,包括绘制折线图、添加交互性工具以及创建交互式应用程序等。接着,我们探讨了 Bokeh 提供的高级功能和定制化选项,如添加更多的图形元素、自定义样式和布局、以及实现数据链接和实时更新等。最后,我们总结了 Bokeh 的应用场景和优势,强调了它在处理实时数据和构建实时监控系统方面的重要性。通过本文的介绍,读者可以全面了解 Bokeh 库的功能和用法,为实现动态数据可视化提供了有力的工具和技术支持。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/586169.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows下安装onlyoffice

文章目录 1、 安装ErLang2、 安装rabbitmq3、 安装postgresql4、 安装onlyoffice(社区版) 1、 安装ErLang 下载地址:https://erlang.org/download/otp_win64_24.2.exe opt_wind64_24.2.exe 直接运行,一步一步安装 2、 安装rabbitmq 下载地址&#xf…

【笔记】Simulink与Workbench交互+自定义m函数封装为Simulink模块

以如下三角函数为例,说明建模方法 ya*sin(b*2*pi*uc);0.总模型总代码 总模型 总代码: clc clear close allt_all10; a10; b1; c0;%pi/2; delta_t0.01; simOutsim(test240430); out_tsimOut.tout; out_y1simOut.yout{1}.Values; out_y2simOut.yout{2}.…

C++-10

1.C一个程序,实现两个类,分别存放输入的字符串中的数字和字母,并按各自的顺序排列, 类中实现-一个dump函数,调C用后输出类中当前存放的字符串结果。 例如,输入1u4y2a3d,输出:存放字母的类,输出a…

机器人正反向运动学(FK和IK)

绕第一个顶点可以沿Z轴转动,角度用alpha表示 绕第二个点沿X轴转动,角度为Beta 第三个点沿X轴转动,记作gama 这三个点构成姿态(pose) 我们记第一个点为P0,画出它的本地坐标系,和世界坐标系一样红…

无人机+三维建模:倾斜摄影技术详解

无人机倾斜摄影测量技术是一项高新技术,近年来在国际摄影测量领域得到了快速发展。这种技术通过从一个垂直和四个倾斜的五个不同视角同步采集影像,从而获取到丰富的建筑物顶面及侧视的高分辨率纹理。这种技术不仅能够真实地反映地物情况,还能…

设计模式 --6组合模式

文章目录 组合模式应用场景组合模式概念组合模式结构图透明方式和安全方式什么时候使用组合模式公司管理系统使用 组合模式来构架组合模式的好处 组合模式应用场景 整体和部分可以被一致性对待 比如人力资源部 财务部的管理功能可以复用于分公司的功能 可以引入一种 树状的结构…

【webrtc】MessageHandler 2: 基于线程的消息处理:以PeerConnectionClient为例

PeerConnectionClient 前一篇 nullaudiopoller 并么有场景线程,而是就是在当前线程直接执行的, PeerConnectionClient 作为一个独立的客户端,默认的是主线程。 PeerConnectionClient 同时维护客户端的信令状态,并且通过OnMessage实现MessageHandler 消息处理。 目前只处理一…

AI大模型日报#0430:疑似GPT4.5模型刷屏、上交实现「蛋白质功能定向进化」、微软紧急撤回WizardLM-2

导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了今日要点以及每条资讯的摘要。 《AI大模型日报》今日要点: 在AI大模型领域,多项研究进展和行业应用动态引发关注。一夜之间&#x…

Gateway Predicate断言(谓词)

是什么 Spring Cloud Gateway匹配路由作为Spring WebFlux HandlerMapping基础设施的一部分。 Spring Cloud Gateway包含许多内置的路由谓词工厂。 所有这些谓词都匹配HTTP请求的不同属性。 您可以使用逻辑 and 语句来联合收割机组合多个路由谓词工厂。 Predicate就是为了实现一…

sum函数搭配group by /having的案例说明

记录一些常用的函数及用法 --查询份额大于1w的投资人信息。 聚合数据的筛选:当你需要基于聚合函数(如 SUM(), AVG(), MAX(), MIN(), COUNT() 等)的结果来过滤记录时,使用 HAVING 子句。 组合条件:HAVING 子句可以使用…

Nginx配置Https缺少SSL模块

1、Linux下Nginx配置https nginx下载和安装此处就忽略,可自行百度 1.1、配置https 打开nginx配置文件 vim /opt/app/nginx/conf/nginx.conf相关https配置 server {listen 443 ssl; #开放端口server_name echarts.net;#域名#redirect to https#ssl on; #旧版#ssl证…

ubuntu 利用阿里网盘API实现文件的上传和下载

文章目录 背景脚本初始化 阿里云盘API工具 aligo安装aligoaligo教程实战parse.py 演示上传文件上传文件夹下载文件下载文件夹 背景 最近在用ubuntu系统做实验,而ubuntu 系统的文件上传和下载操作很麻烦; 于是便打算使用阿里网盘的API 进行文件下载与上传…

VitePress 构建的博客如何部署到 Netlify 平台?

VitePress 构建的博客如何部署到 Netlify 平台? 前言 之前写了篇文章【使用 Vitepress 构建博客并部署到 github 平台】,有个老哥说 github page 访问太慢了,希望放到 Netlify 平台上面。 咱也没部署过,就试了一下,发…

JAVA面试专题-Redis

你在最近的项目中哪些场景使用了Redis 缓存 缓存穿透 缓存穿透:查询一个不存在的数据,mysql查询不到数据也不好直接写入缓存,导致每次请求都查数据库。 解决方案一:缓存空数据,即使查询返回的数据为空,也把…

C#应用程序实现多屏显示

前言 随着业务发展,应用程序在一些特定场景下,只在一个显示器上展示信息已经不能满足用户需求。我们如何把主屏运行程序中多个窗体移动到各个扩展屏幕位置显示呢?C# 是通过什么方式来实现的,下面介绍 C# 使用 Screen 类的方式来实…

vue+elementUI实现点击左右箭头切换按钮功能

原本是可以用el-tabs做的,就像下面的样式,但是领导说不行 最后用button和element里面的el-carousel(走马灯)结合了一下 长这样 感觉还不错 可以自己改样式 代码如下: <div class"drawer-carousel"><el-carousel arrow"always" :loop"false…

Linux基础part-5

1、Linux用户与用户组管理 1、用户是什么&#xff1f; 实现资源分派&#xff08;区分和管理系统资源的访问权限&#xff0c;将不同的资源分配给不同的用户&#xff09;实现认证pam和授权&#xff08;用户身份通常通过用户名和密码进行认证&#xff0c;认证成功后系统将授予用…

开源、轻量、易用的服务器实时监控工具:哪吒探针

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 哪吒探针是一个开源、轻量、易用的服务器监控、运维工具&#xff0c;它有以下几个特点&#xff1a; 一键安装&#xff1a;可以一键安装面板与 Agent&#xff0c;并且支持 Linux、Windows、MacOS、OpenWRT…

scikit-learn:Python中的机器学习-1

简介&#xff1a;问题设置 什么是机器学习&#xff1f; 机器学习是关于构建具有可调参数的程序&#xff0c;这些参数可以自动调整&#xff0c;以便通过适应先前看到的数据来改善其行为。机器学习可以被认为是人工智能的一个子领域&#xff0c;因为这些算法可以被视为构建模块…

气象数据nc数据矢量化处理解析及可视化

气象数据可视化是将气象学领域中复杂的数据集转化为图形或图像的过程&#xff0c;以直观展示天气现象、气候模式、趋势和预报结果。气象数据的可视化技术广泛应用于科学研究、气象预报、航空、航海、农业生产、灾害预警系统、城市规划、公众服务等领域。以下是一些关键的气象数…