掌握Python庫的Bokeh,就能讓你的交互炫目可視化

来源:https://www.cnblogs.com/huaweiyun/p/18074729
-Advertisement-
Play Games

本文分享自華為雲社區《Bokeh圖形魔法:掌握繪圖基礎與高級技巧,定製炫目可視化》,作者: 檸檬味擁抱。 Bokeh是一個用於創建互動式可視化圖形的強大Python庫。它不僅易於使用,而且功能強大,適用於各種數據可視化需求。本文將介紹Bokeh庫的繪圖可視化基礎入門,重點說明常用的參數,並通過實例演 ...


本文分享自華為雲社區《Bokeh圖形魔法:掌握繪圖基礎與高級技巧,定製炫目可視化》,作者: 檸檬味擁抱。

Bokeh是一個用於創建互動式可視化圖形的強大Python庫。它不僅易於使用,而且功能強大,適用於各種數據可視化需求。本文將介紹Bokeh庫的繪圖可視化基礎入門,重點說明常用的參數,並通過實例演示如何在實際項目中應用這些技術。

安裝Bokeh庫

首先,確保你已經安裝了Bokeh庫。如果沒有安裝,可以使用以下命令進行安裝:

pip install bokeh

Bokeh繪圖基礎

Bokeh支持多種圖形類型,包括散點圖、線圖、柱狀圖等。在繪製這些圖形時,我們需要關註一些重要的參數。

基礎圖形繪製

首先,我們來看一個簡單的例子,繪製一個散點圖:

from bokeh.plotting import figure, show
from bokeh.io import output_notebook

# 準備數據
x = [1, 2, 3, 4, 5]
y = [6, 7, 2, 4, 5]

# 創建繪圖對象
p = figure(title="簡單散點圖", x_axis_label='X軸', y_axis_label='Y軸')

# 繪製散點圖
p.circle(x, y, size=10, color="navy", alpha=0.5)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在上述代碼中,我們使用figure函數創建了一個繪圖對象,並使用circle方法繪製了一個散點圖。size參數控制點的大小,color參數定義顏色,alpha參數設置透明度。

完善圖形

除了基本的繪圖,Bokeh還支持添加軸標簽、圖例等元素,使圖形更加完整。以下是一個例子:

# 添加軸標簽
p.xaxis.axis_label_standoff = 15
p.yaxis.axis_label_standoff = 15

# 添加圖例
p.legend.label_text_font_size = "12pt"
p.legend.location = "top_left"

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

通過以上代碼,我們在圖形上方添加了X軸和Y軸的標簽,併在左上角添加了圖例。

實例演示

讓我們通過一個實際案例,展示如何使用Bokeh進行更複雜的可視化。

案例:股票走勢圖

import yfinance as yf

# 獲取股票數據
stock_data = yf.download("AAPL", start="2023-01-01", end="2024-01-01")

# 創建繪圖對象
p = figure(title="AAPL股票走勢", x_axis_label='日期', y_axis_label='股價(美元)', x_axis_type="datetime")

# 繪製線圖
p.line(stock_data.index, stock_data['Close'], line_width=2, color="orange", legend_label="收盤價")

# 添加圖例和軸標簽
p.legend.location = "top_left"
p.xaxis.axis_label_standoff = 15
p.yaxis.axis_label_standoff = 15

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在這個例子中,我們使用了yfinance庫獲取了蘋果公司(AAPL)股票在指定日期範圍內的數據,並使用Bokeh繪製了股票的收盤價走勢圖。

Bokeh庫高級功能探索

在瞭解了Bokeh的基礎繪圖技術後,我們將深入探討一些高級功能,使得你能夠更靈活、更創造性地進行數據可視化。

1. 工具欄和交互性

Bokeh提供了豐富的工具欄,可以讓用戶與圖形進行交互。下麵是一個包含工具欄的例子:

from bokeh.models import HoverTool

# 創建繪圖對象
p = figure(title="互動式散點圖", x_axis_label='X軸', y_axis_label='Y軸', tools="pan,box_zoom,reset,save")

# 添加懸停工具
hover = HoverTool(tooltips=[("數值", "@x, @y")])
p.add_tools(hover)

# 繪製散點圖
p.circle(x, y, size=10, color="navy", alpha=0.5)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在上述例子中,我們通過tools參數添加了平移、縮放、重置和保存工具,並使用HoverTool添加了懸停提示。

2. 高級圖形元素

Bokeh支持繪製一些高級圖形元素,例如矩形、橢圓等。以下是一個繪製矩形和橢圓的例子:

# 創建繪圖對象
p = figure(title="矩形和橢圓示例", x_axis_label='X軸', y_axis_label='Y軸')

# 繪製矩形
p.rect(x=[1, 2, 3], y=[4, 5, 6], width=0.2, height=0.2, color="green", alpha=0.7)

# 繪製橢圓
p.ellipse(x=[4, 5, 6], y=[7, 8, 9], width=0.2, height=0.1, color="blue", alpha=0.7)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

3. 數據鏈接和動態更新

Bokeh允許你動態地更新圖形,可以根據用戶的輸入或外部事件來實現。以下是一個簡單的例子,演示如何通過滑塊動態更新散點圖:

from bokeh.models import Slider
from bokeh.layouts import column

# 創建繪圖對象
p = figure(title="動態散點圖", x_axis_label='X軸', y_axis_label='Y軸')

# 創建滑塊
slider = Slider(start=1, end=10, step=1, value=1, title="選擇散點大小")

# 回調函數,根據滑塊值更新散點大小
def update_size(attr, old, new):
    p.circle(x, y, size=new, color="navy", alpha=0.5)

slider.on_change('value', update_size)

# 將圖形和滑塊組合在一起
layout = column(p, slider)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(layout)

在這個例子中,滑塊的值變化時,通過回調函數更新了散點的大小,實現了動態更新效果。,你可以創建出更具吸引力和實用性的可視化圖形,更好地展示和解釋數據。繼續探索Bokeh的文檔和示例,發揮其潛力,提升你的數據可視化技能。

Bokeh庫與其他庫的整合

Bokeh可以與其他Python庫無縫整合,進一步拓展其功能。在本節中,我們將介紹Bokeh與Pandas、Matplotlib等庫的整合,以及如何在Web應用中使用Bokeh。

1. 與Pandas整合

Pandas是一個強大的數據分析庫,而Bokeh可以輕鬆地與Pandas進行整合,實現更便捷的數據可視化。

import pandas as pd

# 創建一個Pandas DataFrame
data = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5]})

# 使用Bokeh繪製散點圖
p = figure(title="Pandas整合示例", x_axis_label='X軸', y_axis_label='Y軸')
p.circle('x', 'y', size=10, color="navy", alpha=0.5, source=data)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在這個例子中,我們創建了一個Pandas DataFrame,並使用Bokeh的circle函數繪製了散點圖,其中的數據直接來自於DataFrame。

2. 與Matplotlib整合

如果你已經熟悉Matplotlib,並且希望結合Bokeh的交互性和Matplotlib的繪圖功能,你可以使用bokeh.plottingfrom_bokeh函數將Bokeh圖形轉換為Matplotlib圖形。

from bokeh.plotting import figure, show
from bokeh.io import output_notebook
from bokeh.plotting import from_bokeh

# 創建Bokeh繪圖對象
p = figure(title="Bokeh與Matplotlib整合示例", x_axis_label='X軸', y_axis_label='Y軸')
p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=10, color="navy", alpha=0.5)

# 在Jupyter Notebook中顯示Bokeh圖形
output_notebook()
show(p)

# 轉換為Matplotlib圖形
mpl_fig = from_bokeh(p)

# 在Matplotlib中顯示圖形
import matplotlib.pyplot as plt
plt.show(mpl_fig)

這樣,你可以在使用Bokeh的同時,充分利用Matplotlib的豐富繪圖功能。

3. 在Web應用中使用Bokeh

Bokeh提供了bokeh.server模塊,使得你能夠將Bokeh圖形嵌入到Web應用中。這樣,你可以創建互動式、動態的可視化應用。

from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider
from bokeh.layouts import column
from bokeh.io import curdoc

# 創建繪圖對象和數據源
source = ColumnDataSource(data={'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5]})
p = figure(title="動態散點圖", x_axis_label='X軸', y_axis_label='Y軸')
p.circle('x', 'y', size=10, color="navy", alpha=0.5, source=source)

# 創建滑塊和回調函數
slider = Slider(start=1, end=10, step=1, value=1, title="選擇散點大小")

def update_size(attr, old, new):
    source.data = {'x': [1, 2, 3, 4, 5], 'y': [6, 7, 2, 4, 5], 'size': [new]*5}

slider.on_change('value', update_size)

# 將圖形和滑塊組合在一起
layout = column(p, slider)

# 將佈局添加到文檔
curdoc().add_root(layout)

通過上述代碼,你可以使用Bokeh創建一個互動式Web應用。運行此腳本後,可以通過訪問http://localhost:5006/在本地查看應用。

Bokeh庫的主題和樣式定製

Bokeh不僅提供了豐富的繪圖功能,還允許用戶根據需求自定義圖形的主題和樣式,以便更好地與項目風格或品牌一致。在本節中,我們將學習如何定製Bokeh圖形的主題和樣式。

1. 主題定製

Bokeh提供了一系列內置主題,用戶可以輕鬆切換以改變圖形的整體外觀。以下是一個主題定製的簡單例子:

from bokeh.themes import built_in_themes

# 創建繪圖對象
p = figure(title="主題定製示例", x_axis_label='X軸', y_axis_label='Y軸')

# 選擇主題
p.theme = built_in_themes['dark_minimal']

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在這個例子中,我們選擇了內置主題'dark_minimal',你可以根據實際需求選擇其他主題,如'light_minimal''caliber'等。

2. 樣式定製

Bokeh還允許用戶直接調整圖形的樣式,包括顏色、線型、字體等。以下是一個簡單的樣式定製例子:

# 創建繪圖對象
p = figure(title="樣式定製示例", x_axis_label='X軸', y_axis_label='Y軸')

# 繪製線圖
p.line([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], line_width=2, line_color="green", line_dash="dashed")

# 設置字體樣式
p.title.text_font = "times"
p.title.text_font_style = "italic"

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在這個例子中,我們使用line_color參數設置線的顏色為綠色,使用line_dash參數設置線型為虛線,通過設置title.text_fonttitle.text_font_style調整標題的字體和樣式。

3. 自定義工具提示

Bokeh允許用戶自定義工具提示的內容和樣式,以更好地滿足項目需求。以下是一個自定義工具提示的例子:

from bokeh.models import HoverTool

# 創建繪圖對象
p = figure(title="自定義工具提示示例", x_axis_label='X軸', y_axis_label='Y軸')

# 繪製散點圖
scatter = p.circle([1, 2, 3, 4, 5], [6, 7, 2, 4, 5], size=10, color="navy", alpha=0.5)

# 自定義工具提示
hover = HoverTool(tooltips=[("數值", "@x, @y"), ("額外信息", "自定義信息")], renderers=[scatter])
p.add_tools(hover)

# 在Jupyter Notebook中顯示圖形
output_notebook()
show(p)

在這個例子中,我們通過HoverTooltooltips參數定義了工具提示的內容,並通過renderers參數指定了應用工具提示的圖形元素。

總結

Bokeh庫是一個功能強大、靈活且易於使用的Python可視化庫,適用於各種數據可視化需求。本文從基礎入門開始,介紹了Bokeh的基本繪圖技術,包括散點圖、線圖、柱狀圖等,詳細說明瞭常用的參數和實例演示。隨後,我們深入探討了Bokeh的高級功能,包括工具欄、交互性、高級圖形元素和動態更新,使得讀者能夠更靈活地進行數據可視化。

進一步地,我們探討了Bokeh庫與其他常用庫的整合,包括與Pandas、Matplotlib的結合,以及在Web應用中使用Bokeh的方法。這使得Bokeh不僅可以獨立使用,還可以與其他庫協同工作,充分發揮各個庫的優勢。

最後,我們瞭解了Bokeh庫的主題和樣式定製,學習瞭如何選擇內置主題、調整樣式和自定義工具提示,以便更好地滿足個性化的可視化需求。Bokeh的主題和樣式定製功能為用戶提供了更多定製化的空間,使得可視化圖形更符合項目的整體風格和品牌。

通過本文的內容,讀者可以建立起對Bokeh庫全面的認識,從基礎到高級,從整合到定製,為數據科學家和工程師提供了強大的工具,助力更好地理解、展示和傳達數據。繼續深入學習Bokeh的文檔和示例,將有助於更加熟練地運用這一強大的可視化工具。

 

點擊關註,第一時間瞭解華為雲新鮮技術~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為2024年最受歡迎的Vue.js組件庫之一,ViewDesign憑藉其現代化設計理念、強大功能和可定製性脫穎而出。這款開源UI組件庫提供了豐富的基礎組件、數據展示組件和交互反饋組件,涵蓋了大部分Web開發場景。同時,ViewDesign還具備良好的可訪問性、完善的文檔、活躍的社區支持,並對SEO... ...
  • 前言 我們每天寫vue代碼時都在用defineProps,但是你有沒有思考過下麵這些問題。為什麼defineProps不需要import導入?為什麼不能在非setup頂層使用defineProps?defineProps是如何將聲明的 props 自動暴露給模板? 舉幾個例子 我們來看幾個例子,分別 ...
  • “將抽象和實現解耦,讓它們可以獨立變化。” 橋接模式通過將一個類的抽象部分與實現部分分離開來,使它們可以獨立地進行擴展和修改。 ...
  • 我們都知道,我們寫的Java程式需要先經過編譯,生成了.class文件(位元組碼文件)。然而,電腦並不能直接解釋.class文件裡面的內容,這時候就需要一個能載入、解釋.class文件並且能按.class文件里的內容進行處理的一個東西--JVM。 JVM,就是Java虛擬機。它是一種規範,有針對不同 ...
  • 前言 池化思想在實際開發中有很多應用,指的是針對一些創建成本高,創建頻繁的對象,用完不棄,將其緩存在對象池子里,下次使用時優先從池子里獲取,如果獲取到則可以直接使用,以此降低創建對象的開銷。 我們最熟悉的資料庫連接池就是一種池化思想的應用,資料庫操作是非常頻繁的,資料庫連接的創建、銷毀開銷很大,每次 ...
  • 本文介紹基於R語言中的raster包,讀取單張或批量讀取多張柵格圖像,並對柵格圖像數據加以基本處理的方法。 1 包的安裝與導入 首先,我們需要配置好對應的R語言包;前面也提到,我們這裡選擇基於raster包來實現柵格圖像數據的讀取與處理工作。首先,如果有需要的話,我們可以先到raster包在R語言的 ...
  • Java的序列化和反序列化機制 問題導入: 在閱讀ArrayList源碼的時候,註意到,其內部的成員變數動態數組elementData被Java中的關鍵字transient修飾 transient關鍵字意味著Java在序列化時會跳過該欄位(不序列化該欄位) 而Java在預設情況下會序列化類(實現了J ...
  • 本文的重點在於引導讀者如何初步掌握爬蟲技術。初步掌握爬蟲技術並不難,但是在實際操作中可能會遇到一些困難,比如一些網站不允許直接訪問,需要登錄或者進行各種人機驗證等。因此,最好先從爬取一些新聞資訊類的網站開始,因為這樣相對容易。涉及用戶支付等敏感信息的網站就不那麼容易獲取了。因此,在入門階段,建議不要... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...