Bokeh:Python交互式可視化的利器詳解
1. Bokeh 簡(jiǎn)介
Bokeh 是一個(gè)專注于 Web 端交互式數(shù)據(jù)可視化的 Python 庫(kù)。它基于 JavaScript 的 BokehJS 進(jìn)行渲染,使得生成的圖表可以直接嵌入 HTML,并支持交互操作。與 Matplotlib、Seaborn 等傳統(tǒng)靜態(tài)繪圖庫(kù)相比,Bokeh 在處理大規(guī)模數(shù)據(jù)和交互性方面具有明顯優(yōu)勢(shì)。
1.1 為什么選擇 Bokeh
- 交互性強(qiáng):支持縮放、平移、懸停提示等交互功能。
- 高效渲染:利用 WebGL 提高大規(guī)模數(shù)據(jù)集的繪圖性能。
- 與 Pandas 兼容:可以直接處理 DataFrame 數(shù)據(jù)。
- 易于嵌入:可將可視化結(jié)果嵌入 HTML、Flask、Django 和 Jupyter Notebook。
1.2 安裝與環(huán)境配置
安裝 Bokeh 非常簡(jiǎn)單,可以通過(guò) pip 直接安裝:
pip install bokeh
安裝后,可以在 Python 環(huán)境中測(cè)試:
from bokeh.plotting import figure, show
from bokeh.io import output_file
output_file("test.html") # 生成 HTML 文件
p = figure(title="示例圖", x_axis_label="X 軸", y_axis_label="Y 軸")
p.line([1, 2, 3, 4], [10, 20, 30, 40], line_width=2)
show(p) # 在瀏覽器中顯示圖表運(yùn)行代碼后,會(huì)在默認(rèn)瀏覽器中打開(kāi)一個(gè) HTML 頁(yè)面,顯示簡(jiǎn)單的折線圖。
2. Bokeh 基礎(chǔ)
Bokeh 的核心概念主要包括:
figure:繪圖區(qū)域,用于創(chuàng)建圖表。glyph:可視化圖元,如線、點(diǎn)、柱狀圖等。ColumnDataSource:數(shù)據(jù)源,便于管理數(shù)據(jù)和交互。output_file/output_notebook:指定輸出方式。show/save:顯示或保存圖表。
2.1 創(chuàng)建基本繪圖
Bokeh 提供了多種基礎(chǔ)圖表類型,包括折線圖、散點(diǎn)圖、條形圖等。以下是一些常見(jiàn)示例。
- 2.1.1 折線圖
from bokeh.plotting import figure, show p = figure(title="折線圖示例", x_axis_label="X", y_axis_label="Y") p.line([1, 2, 3, 4, 5], [5, 7, 2, 3, 6], line_width=2, color="blue") show(p)
- 2.1.2 散點(diǎn)圖
p = figure(title="散點(diǎn)圖示例", x_axis_label="X", y_axis_label="Y") p.circle([1, 2, 3, 4, 5], [5, 7, 2, 3, 6], size=10, color="red", alpha=0.5) show(p)
- 2.1.3 柱狀圖
from bokeh.io import show from bokeh.plotting import figure from bokeh.transform import factor_cmap from bokeh.models import ColumnDataSource fruits = ["蘋(píng)果", "香蕉", "橙子", "葡萄"] values = [10, 20, 15, 30] source = ColumnDataSource(data=dict(fruits=fruits, values=values)) p = figure(x_range=fruits, title="水果銷量", toolbar_location=None, tools="") p.vbar(x="fruits", top="values", width=0.4, source=source) show(p)
3. 交互式功能
Bokeh 的一大亮點(diǎn)是交互式可視化,主要通過(guò) HoverTool、TapTool、BoxSelectTool 等工具實(shí)現(xiàn)。
3.1 鼠標(biāo)懸停顯示數(shù)據(jù)
from bokeh.models import HoverTool
p = figure(title="懸停提示示例", x_axis_label="X", y_axis_label="Y")
p.circle([1, 2, 3, 4], [10, 20, 30, 40], size=10, color="navy", alpha=0.5)
hover = HoverTool(tooltips=[("X 軸", "$x"), ("Y 軸", "$y")])
p.add_tools(hover)
show(p)3.2 選擇和縮放
p = figure(title="選擇和縮放示例", tools="box_select,pan,wheel_zoom,reset") p.circle([1, 2, 3, 4], [10, 20, 30, 40], size=10, color="green", alpha=0.5) show(p)
4. 數(shù)據(jù)流處理
Bokeh 支持動(dòng)態(tài)數(shù)據(jù)更新,適用于實(shí)時(shí)數(shù)據(jù)可視化,如傳感器數(shù)據(jù)、股票市場(chǎng)數(shù)據(jù)等。
4.1 動(dòng)態(tài)數(shù)據(jù)更新
from bokeh.models import ColumnDataSource
from bokeh.plotting import figure, curdoc
import numpy as np
source = ColumnDataSource(data=dict(x=[], y=[]))
p = figure(title="動(dòng)態(tài)數(shù)據(jù)流", x_axis_label="X", y_axis_label="Y")
p.line("x", "y", source=source, line_width=2)
def update():
new_data = dict(x=[np.random.random()], y=[np.random.random()])
source.stream(new_data, rollover=50)
curdoc().add_root(p)
curdoc().add_periodic_callback(update, 1000) # 每秒更新一次運(yùn)行該代碼時(shí),Bokeh 服務(wù)器會(huì)持續(xù)更新數(shù)據(jù),并在瀏覽器中實(shí)時(shí)展示曲線變化。
5. Bokeh 與 Pandas、Flask/Django 集成
Bokeh 可以與 Pandas 結(jié)合處理數(shù)據(jù),并與 Flask 或 Django 進(jìn)行 Web 應(yīng)用集成。
5.1 Bokeh + Pandas
import pandas as pd
data = pd.DataFrame({"x": [1, 2, 3, 4], "y": [10, 20, 30, 40]})
source = ColumnDataSource(data)
p = figure(title="Pandas 數(shù)據(jù)繪圖")
p.line("x", "y", source=source, line_width=2)
show(p)5.2 Bokeh + Flask
from flask import Flask, render_template
from bokeh.embed import components
app = Flask(__name__)
@app.route("/")
def index():
p = figure(title="Flask 集成示例")
p.line([1, 2, 3, 4], [10, 20, 30, 40])
script, div = components(p)
return render_template("index.html", script=script, div=div)
if __name__ == "__main__":
app.run(debug=True)6. 總結(jié)
Bokeh 是 Python 生態(tài)中最強(qiáng)大的交互式可視化工具之一,適用于大規(guī)模數(shù)據(jù)、Web 嵌入和動(dòng)態(tài)數(shù)據(jù)流可視化。
它的靈活性、易用性和強(qiáng)大的交互能力,使其成為數(shù)據(jù)科學(xué)、金融分析、物聯(lián)網(wǎng)數(shù)據(jù)可視化的理想選擇。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Python?Bokeh實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)可視化
- python使用Bokeh庫(kù)實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)的可視化
- Python使用Bokeh庫(kù)實(shí)現(xiàn)炫目的交互可視化
- Python使用Bokeh進(jìn)行交互式數(shù)據(jù)可視化
- Python使用Bokeh實(shí)現(xiàn)交互式圖表的創(chuàng)建
- Python利用Bokeh進(jìn)行數(shù)據(jù)可視化的教程分享
- Python庫(kù)?Bokeh?數(shù)據(jù)可視化實(shí)用指南
- python基于Bokeh庫(kù)制作子彈圖及瀑布圖示例教程
- Python 交互式可視化的利器Bokeh的使用
相關(guān)文章
ffmpeg+Python實(shí)現(xiàn)B站MP4格式音頻與視頻的合并示例代碼
這篇文章主要介紹了ffmpeg+Python實(shí)現(xiàn)B站MP4格式音頻與視頻的合并,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Python開(kāi)發(fā)之Nginx+uWSGI+virtualenv多項(xiàng)目部署教程
這篇文章主要介紹了Python系列之-Nginx+uWSGI+virtualenv多項(xiàng)目部署教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05
Python實(shí)現(xiàn)設(shè)置windows桌面壁紙代碼分享
這篇文章主要介紹了Python實(shí)現(xiàn)設(shè)置windows桌面壁紙,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03
python引入requests報(bào)錯(cuò)could?not?be?resolved解決方案
這篇文章主要為大家介紹了python引入requests報(bào)錯(cuò)could?not?be?resolved解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
python編碼格式導(dǎo)致csv讀取錯(cuò)誤問(wèn)題(csv.reader, pandas.csv_read)
python編碼格式導(dǎo)致csv讀取錯(cuò)誤問(wèn)題(csv.reader, pandas.csv_read),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05
PyCharm進(jìn)行Django項(xiàng)目開(kāi)發(fā)環(huán)境搭建
本文主要介紹了PyCharm進(jìn)行Django項(xiàng)目開(kāi)發(fā)環(huán)境搭建,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
Python內(nèi)置函數(shù)Type()函數(shù)一個(gè)有趣的用法
這篇文章主要介紹了Python內(nèi)置函數(shù)Type()函數(shù)一個(gè)有趣的用法,本文講解的是個(gè)人發(fā)現(xiàn)在的一個(gè)有趣的用法,注意這種寫(xiě)法會(huì)導(dǎo)致代碼很難讀,需要的朋友可以參考下2015-02-02
Python實(shí)現(xiàn)Markdown、富文本和HTML格式之間的轉(zhuǎn)換
要實(shí)現(xiàn)Markdown、富文本(如富文本HTML)和純HTML格式之間的轉(zhuǎn)換,可以使用Python中相關(guān)的庫(kù)來(lái)處理這些格式的解析和轉(zhuǎn)換,下面,我將詳細(xì)介紹如何使用Python實(shí)現(xiàn)Markdown文本格式、富文本格式和HTML格式之間的轉(zhuǎn)換,需要的朋友可以參考下2025-01-01
python批量將excel內(nèi)容進(jìn)行翻譯寫(xiě)入功能
這篇文章主要介紹了python批量將excel內(nèi)容進(jìn)行翻譯寫(xiě)入功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-10-10
Python Tkinter Entry和Text的添加與使用詳解
這篇文章主要介紹了Python Tkinter Entry和Text的添加與使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

