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

华为云开发者联盟發表於2024-03-15

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

Bokeh是一個用於建立互動式視覺化圖形的強大Python庫。它不僅易於使用,而且功能強大,適用於各種資料視覺化需求。本文將介紹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軸的標籤,並在左上角新增了圖例。

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

例項演示

讓我們透過一個實際案例,展示如何使用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繪製了股票的收盤價走勢圖。

掌握Python庫的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引數指定了應用工具提示的圖形元素。

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

總結

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

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

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

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

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

相關文章