Python可視化工具-Bokeh:動態顯示數據

目錄

概述

1 認識Bokeh

1.1 Bokeh介紹

1.2 安裝Bokeh

1.3 范例介紹

2 Bokeh的應用

2.1 Bokeh應用的框架結構

2.2 實時性數據核心原理

3 具體案例

3.1 代碼實現

3.2 部署和運行


概述

Bokeh是一個用于創建交互式可視化的Python庫,特別適合在Web瀏覽器中展示。它能夠生成各種類型的圖表,并且支持高度交互性,如平移、縮放、選擇、懸停提示等。以下是一個簡單的Bokeh示例,展示如何創建一個帶有交互功能的折線圖。

1 認識Bokeh

1.1 Bokeh介紹

Bokeh?是一個強大的交互式可視化庫,專為現代 Web 瀏覽器設計。它支持創建高性能、可交互的圖表和儀表盤,適用于大規模數據集。

核心優勢:

  1. 交互性強:支持平移、縮放、懸停提示、選擇等

  2. 輸出靈活:生成 HTML 文件、嵌入 Jupyter Notebook 或部署為 Web 應用

  3. 流式數據支持:實時更新圖表(如金融數據流)

  4. 多種渲染器:Canvas、SVG、WebGL 支持

1.2 安裝Bokeh

官方網站地址:

https://docs.bokeh.org/en/latest/index.html#

打開網站其頁面如下,目前其最新版本已經更新至:v3.7.3

該packet對Python要求其版本必須升級至Python 3.10,安裝命令源代碼:

pip install bokeh

1.3 范例介紹

官網提供了許多冠以Bokeh的使用案例,程序員可參考這些Demo實現自己感興趣的功能,基礎案例如下:

2 Bokeh的應用

2.1 Bokeh應用的框架結構

2.2 實時性數據核心原理

實時數據可視化核心原理,Bokeh 通過?ColumnDataSource?和回調機制實現實時數據更新:

  1. 數據源對象ColumnDataSource?存儲可視化數據

  2. 流式更新stream()?方法增量添加新數據

  3. 回調函數:周期性更新數據源

  4. Bokeh 服務器:維護應用狀態和處理實時更新

3 具體案例

3.1 代碼實現

應用Bokeh模擬傳感器實時更新數據的特性?

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Time    : 2020/4/9 13:05
# @Author  : ming fei.tang
# @File    : debug tools
# ---------------------
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource, Range1d, HoverTool
from bokeh.layouts import column
from bokeh.models.widgets import Div
import random
import datetime
import numpy as np# 創建數據源
source = ColumnDataSource(data={'time': [],'temperature': [],'humidity': []
})# 創建圖表
temp_plot = figure(title='溫度傳感器實時數據',x_axis_type='datetime',width=1000, height=300,tools="pan,wheel_zoom,box_zoom,reset"
)
temp_plot.line('time', 'temperature', source=source, line_width=2, color='red', legend_label="溫度(℃)")
temp_plot.y_range = Range1d(15, 35)humidity_plot = figure(title='濕度傳感器實時數據',x_axis_type='datetime',width=1000, height=300,x_range=temp_plot.x_range  # 共享X軸范圍
)
humidity_plot.line('time', 'humidity', source=source, line_width=2, color='blue', legend_label="濕度(%)")
humidity_plot.y_range = Range1d(0, 100)# 狀態面板
stats_div = Div(text="<h3>傳感器狀態: <span style='color:green'>運行中</span></h3>", width=200)# 模擬數據生成
def generate_sensor_data():current_time = datetime.datetime.now()# 模擬溫度(帶有小幅波動)base_temp = 25 + 5 * np.sin(current_time.minute / 30 * np.pi)temperature = base_temp + random.uniform(-0.5, 0.5)# 模擬濕度(與溫度反向變化)humidity = 50 - 0.8 * (temperature - 25) + random.uniform(-2, 2)return {'time': [current_time],'temperature': [temperature],'humidity': [max(0, min(100, humidity))]  # 限制在0-100范圍}# 更新函數
def update():new_data = generate_sensor_data()# 流式更新source.stream(new_data, rollover=300)  # 保留300個最新數據點# 更新狀態面板stats_div.text = f"""<div style="background:#f9f9f9; padding:10px; border-radius:5px"><h3>傳感器狀態: <span style='color:green'>? 運行中</span></h3><p>最后更新時間: {datetime.datetime.now().strftime('%H:%M:%S')}</p><p>當前溫度: <b>{new_data['temperature'][0]:.1f}℃</b></p><p>當前濕度: <b>{new_data['humidity'][0]:.1f}%</b></p><p>數據點數: {len(source.data['time'])}</p></div>"""# 添加懸停工具
hover = HoverTool(tooltips=[("時間", "@time{%F %T}"),("溫度", "@temperature{0.0}℃"),("濕度", "@humidity{0}%")
], formatters={'@time': 'datetime'})temp_plot.add_tools(hover)# 設置布局和更新頻率
layout = column(stats_div, temp_plot, humidity_plot)
curdoc().add_root(layout)
curdoc().add_periodic_callback(update, 1000)  # 每秒更新一次
curdoc().title = "實時傳感器監控"

3.2 部署和運行

具體方法如下:

部署與運行方法

  1. 保存為 Python 文件xxx.py

  2. 啟動 Bokeh 服務器

    bash

    bokeh serve --show xxx.py
  3. 瀏覽器訪問http://localhost:5006/xxx

筆者創建的項目結構如下:

在終端運行該代碼,運行方法如下:

在該.py文件所在目錄下運行該命令:

bokeh serve --show Bokeh_stud.py

終端上顯示如下信息,說明系統已經正常啟動:

在瀏覽器上會顯示頁面:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93516.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Elasticsearch「kNN Retriever」把向量檢索裝進一條 \_search 管線

1. kNN retriever 是什么&#xff1f; kNN retriever 是 Retriever 框架中的首階段召回器&#xff0c;負責對一個向量字段做近鄰搜索&#xff0c;返回 Top-K 文檔。相比早期的 knn 頂級語法&#xff0c;Retriever 讓我們能在一個請求里組合多種策略&#xff08;如 RRF/Rescorer…

第四天~在CANFD或CAN2.0的ARXML文件中實現Multiplexor多路復用信號實戰

【ARXML專題】-解鎖CAN信號超能力:Multiplexor多路復用技術深度解析 "當你的CAN幀需要傳輸100種信號卻只有64字節時,就像試圖用行李箱裝下一整個衣櫥——Multiplexor就是你的真空壓縮袋" 信號擁堵時代的救世主 現代豪華汽車中,單個ECU可能需處理500+信號,而傳統…

JavaScript 基礎入門:從零開始學 JS

一、JavaScript 簡介JavaScript&#xff08;簡稱 JS&#xff09;是一種高級的、解釋型的編程語言&#xff0c;由 Netscape 公司的 Brendan Eich 在 1995 年開發&#xff0c;最初命名為 LiveScript&#xff0c;后因與 Java 的合作關系而改名為 JavaScript。作為 Web 開發的三大核…

pytest中使用loguru的問題及解決

引語 上一篇文章,我們向大家推薦了python語言的一個第三方日志庫loguru,使用非常簡單且功能完備。 但對于我們做自動化測試,經常使用 pytest 框架的小伙伴來說,卻有點小問題。就是 Pytest 內建的日志捕獲機制是在標準庫 logging 的基礎上進行優化過的。 這樣我們在使用 p…

Qt異步編程:QFuture與QPromise深度解析

在現代GUI應用中&#xff0c;異步操作是保證界面流暢性的關鍵。本文將深入探討Qt框架中強大的異步工具——QFuture和QPromise&#xff0c;揭示它們如何簡化多線程編程并提升應用性能。 為什么需要QFuture/QPromise&#xff1f; 在Qt開發中&#xff0c;我們經常面臨這樣的挑戰&a…

基于Python的電影評論數據分析系統 Python+Django+Vue.js

本文項目編號 25008 &#xff0c;文末自助獲取源碼 \color{red}{25008&#xff0c;文末自助獲取源碼} 25008&#xff0c;文末自助獲取源碼 目錄 一、系統介紹1.1 用戶功能1.2 管理員功能 二、系統錄屏三、啟動教程四、功能截圖五、文案資料5.1 選題背景5.2 國內外研究現狀 六、…

數據結構:在二叉搜索樹中插入元素(Insert in a BST)

目錄 插入的本質是什么&#xff1f; 如何尋找“合法”的位置&#xff1f;—— 模擬查找過程 遞歸插入&#xff08;Recursive Insert&#xff09;—— 優雅的實現 代碼逐步完善 總結 上一節我們從第一性原理搞清楚了二叉搜索樹&#xff08;BST&#xff09;是什么&#xff0…

【論文閱讀】美 MBSE 方法發展分析及啟示(2024)

文章目錄 論文摘要 論文框架 1. MBSE 方法概述 2. 美國防部的 MBSE 方法政策要求 在這里插入圖片描述 3. 美軍兵種的 MBSE 方法政策要求 4. 啟示 5.總結 參考文獻 論文摘要 本文梳理了美國防部基于模型的系統工程(MBSE)方法的發展歷程,并剖析 其技術原理;跟蹤《數字工程戰略…

人工智能訓練師復習題目實操題1.1.1 - 1.1.5

列出所有的python 庫和 apiimport pandas as pd import numpy as np就這兩個庫pandas 庫 - apinumpy 庫 - apimatplotlib.pyplot - apipd.read_csv()np.where(condition,x,y)fillna(methodffill,inplaceTrue)methodbfill,pd.read_excel()np返回結果 series 對象 data[A列].valu…

旅游管理實訓室:旅游教育實踐育人的關鍵支撐

在中等職業教育旅游服務與管理專業教學中&#xff0c;旅游管理實訓室并非簡單的教學場所&#xff0c;而是落實專業教學標準、實現 “理實一體化” 育人的核心陣地。它通過模擬真實職業場景、配置專業實訓設備、設計實踐教學活動&#xff0c;將抽象的專業知識轉化為具體的操作技…

http工作流程

HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;是互聯網中客戶端與服務器之間傳輸超文本&#xff08;如HTML、圖片、JSON等&#xff09;的核心協議&#xff0c;基于請求-響應模型和TCP/IP協議族工作。其完整工作流程可拆解為以下9個核心步…

正則表達式實用面試題與代碼解析專欄

正則表達式是前端表單驗證、字符串匹配的核心工具,簡潔高效的正則能大幅提升代碼性能。本專欄整理了7道高頻面試題,包含核心正則表達式、代碼實現及關鍵知識點解析,幫你快速掌握正則實用技巧。 一、正則基礎:核心概念與語法 在學習面試題前,先明確幾個高頻基礎語法,這是…

【數據可視化-89】基孔肯雅熱病例數據分析與可視化:Python + pyecharts洞察疫情動態

&#x1f9d1; 博主簡介&#xff1a;曾任某智慧城市類企業算法總監&#xff0c;目前在美國市場的物流公司從事高級算法工程師一職&#xff0c;深耕人工智能領域&#xff0c;精通python數據挖掘、可視化、機器學習等&#xff0c;發表過AI相關的專利并多次在AI類比賽中獲獎。CSDN…

云智智慧停充一體云-allnew全新體驗-路內停車源碼+路外停車源碼+充電樁源碼解決方案

采用Java主流的微服務技術棧&#xff0c;基于 Spring Cloud Alibaba 的微服務解決方案進行封裝的快速開發平臺&#xff0c;包含多種常用開箱即用功能的模塊&#xff0c;通用技術組件與服務、微服務治理&#xff0c;具備RBAC功能、網關統一鑒權、Xss防跨站攻擊、自動生成前后端代…

利用pypy加速pyxlsbwriter生成xlsb文件

上文介紹了python通過DuckDB和pyxlsbwriter模塊生成xlsb文件&#xff0c;因為python是解釋執行&#xff0c;它的速度有點慢&#xff0c;pypy是另一種python解釋器&#xff0c;它使用即時編譯&#xff08;JIT&#xff09;技術來提高執行速度。 因為DuckDB與pypy不兼容&#xff0…

【Java后端】Spring Boot 集成 MyBatis-Plus 全攻略

Spring Boot 集成 MyBatis-Plus 全攻略 1. 為什么選擇 MyBatis-Plus 零侵入&#xff1a;在 MyBatis 基礎上增強&#xff0c;不影響現有功能。內置 CRUD&#xff1a;無需寫 XML/SQL&#xff0c;直接調用 BaseMapper 方法。強大插件&#xff1a;分頁插件、性能分析、樂觀鎖、多租…

LangChain 多任務應用開發

Q: LangChain dify coze是競品關系 都是AI Agent搭建平臺&#xff0c;dify和coze 屬于低代碼&#xff0c;langChain屬于高代碼&#xff0c;coze優于dify Q&#xff1a;向量數據庫是存儲向量&#xff0c;做相似度檢索的&#xff0c;可以用faiss milvus chromdb Q&#xff1a;使用…

實用技巧:Oracle中精準查看表占用空間大小

目錄實用技巧&#xff1a;Oracle中精準查看表占用空間大小一、為什么需要精準統計表空間占用&#xff1f;二、完整查詢SQL&#xff1a;覆蓋表、LOB、索引三、SQL語句關鍵邏輯解析1. 基礎表&#xff1a;dba_tables 與 dba_tablespaces2. 子查詢1&#xff1a;統計表段空間&#x…

openEuler等Linux系統中如何復制移動硬盤的數據

在 openEuler 系統中,提示 “You should mount volume first” ,意思是需要先掛載移動硬盤的分區才能訪問: 安裝必要軟件(針對特殊文件系統) 如果移動硬盤是 NTFS 等非 Linux 原生支持的文件系統格式,需要安裝對應的支持軟件,以掛載 NTFS 格式移動硬盤為例,需要安裝 …

java如何把字符串數字轉換成數字類型

在Java中將字符串數字轉換為數字類型有多種方法&#xff0c;以下是詳細說明和示例代碼&#xff1a; 一、基礎轉換方法 Integer.parseInt() String str "123"; int num Integer.parseInt(str); // 轉換為intDouble.parseDouble() String str "3.14"; dou…