Python使用Plotly制作交互式圖表的操作指南
引言
Plotly是一款用來做數(shù)據(jù)分析和可視化的在線平臺,功能真的是非常強大,它主要有以下特點:
- 圖形多樣化:在線繪制多種圖形,比如柱狀圖、餅圖、直方圖、餅圖、氣泡圖、?;鶊D、股票圖、旭日圖、聯(lián)合分布圖、地圖等
- 在線可編輯:Plotly中有在線編輯的平臺,可以將生成的圖形保存到該平臺,并進(jìn)行分享
- 開源免費:Plotly的所有資源都是開源免費的,用戶可直接使用,還可以直接和R、python、MATLAB等軟件或者語言無縫對接
- 圖形動態(tài)化:Plotly生成的圖形全部是動態(tài)化;Plotly的繪圖最好在Jupyter notebook中進(jìn)行,能夠很好地顯示動態(tài)效果
- 顏色絢麗:在使用Plotly繪制圖形的時候,我們可以進(jìn)行圖形顏色的設(shè)置,Plotly提供了豐富的顏色面板供選擇
- 代碼量少:Plotly繪圖,尤其是Plotly的高級封裝Plotly_Express,代碼量非常少;一行代碼就能實現(xiàn)多種功能且精美的圖形
- 內(nèi)置豐富數(shù)據(jù)集:在Plotly中內(nèi)置7個不同類型的數(shù)據(jù)集,方便讀者直接使用內(nèi)置數(shù)據(jù)進(jìn)行學(xué)習(xí)、使用
- 文檔健全:Plotly官方提供了豐富的文檔資料和案例可免費學(xué)習(xí),能夠快速的上手
- 附錄:在官網(wǎng)中展示了Plotly能夠繪制的部分圖形:https://plotly.com/python/
本文將以Plotly為主介紹python中制作交互式圖表的典型用法和高級技巧。
核心概念
1. 圖表部件編程(updatemenus/sliders)
通過 updatemenus
和 sliders
實現(xiàn)動態(tài)交互功能,例如切換數(shù)據(jù)視圖或調(diào)整參數(shù)。
import plotly.graph_objects as go fig = go.Figure() # 添加多條折線 fig.add_trace(go.Scatter(y=[2, 1, 3], name="Line 1")) fig.add_trace(go.Scatter(y=[3, 2, 1], name="Line 2")) # 配置 updatemenus fig.update_layout( updatemenus=[ dict( type="buttons", direction="right", buttons=[ dict(label="Show All", method="update", args=[{"visible": [True, True]}]), dict(label="Show Line 1", method="update", args=[{"visible": [True, False]}]), dict(label="Show Line 2", method="update", args=[{"visible": [False, True]}]), ], ) ] ) fig.show()
效果:按鈕組允許用戶切換顯示不同的折線。
2. WebGL加速的大數(shù)據(jù)渲染
Plotly 支持 WebGL 渲染,適合處理大規(guī)模數(shù)據(jù)集。
import plotly.express as px import numpy as np # 模擬大數(shù)據(jù) np.random.seed(42) x = np.random.rand(100_000) y = np.random.rand(100_000) # 使用 WebGL 加速的散點圖 fig = px.scatter(x=x, y=y, render_mode='webgl', title="WebGL Accelerated Scatter Plot") fig.show()
效果:即使數(shù)據(jù)量達(dá)到 10 萬點,圖表依然流暢。
3. Dash回調(diào)鏈設(shè)計模式
Dash 是 Plotly 的框架,用于構(gòu)建交互式儀表盤。通過回調(diào)鏈實現(xiàn)復(fù)雜交互邏輯。
from dash import Dash, dcc, html, Input, Output app = Dash(__name__) app.layout = html.Div([ dcc.Input(id="input", value="Hello Plotly!", type="text"), html.Div(id="output") ]) @app.callback(Output("output", "children"), [Input("input", "value")]) def update_output(value): return f"You entered: {value}" if __name__ == "__main__": app.run_server(debug=True)
效果:輸入框內(nèi)容實時更新到輸出區(qū)域。
4. 圖表主題與模板系統(tǒng)
Plotly 提供豐富的主題和模板,可快速定制圖表風(fēng)格。
import plotly.express as px df = px.data.gapminder().query("continent=='Oceania'") fig = px.line(df, x="year", y="lifeExp", color="country", template="plotly_dark") fig.show()
效果:深色主題的折線圖,適合夜間模式。
實戰(zhàn)案例
1. 實時疫情數(shù)據(jù)儀表盤開發(fā)
結(jié)合 Dash 和 Plotly 構(gòu)建實時疫情數(shù)據(jù)儀表盤。
from dash import Dash, dcc, html, Input, Output import plotly.express as px import pandas as pd # 模擬疫情數(shù)據(jù) data = { "date": pd.date_range(start="2020-01-01", periods=100), "cases": [i**2 for i in range(100)], "deaths": [i * 5 for i in range(100)] } df = pd.DataFrame(data) app = Dash(__name__) app.layout = html.Div([ dcc.Graph(id="graph"), dcc.Slider( id="year-slider", min=0, max=len(df) - 1, value=0, marks={i: str(df["date"][i].date()) for i in range(0, len(df), 10)}, step=None ) ]) @app.callback(Output("graph", "figure"), [Input("year-slider", "value")]) def update_graph(selected_index): filtered_df = df.iloc[:selected_index + 1] fig = px.line(filtered_df, x="date", y=["cases", "deaths"], title="Covid-19 Cases Over Time") return fig if __name__ == "__main__": app.run_server(debug=True)
效果:滑塊控制時間軸,動態(tài)展示疫情數(shù)據(jù)變化。
2. 3D體素可視化與機器學(xué)習(xí)特征空間展示
使用 Plotly 繪制 3D 體素圖,展示機器學(xué)習(xí)特征空間。
import plotly.graph_objects as go import numpy as np # 創(chuàng)建 3D 體素數(shù)據(jù) x, y, z = np.indices((8, 8, 8)) cube1 = (x < 3) & (y < 3) & (z < 3) cube2 = (x >= 5) & (y >= 5) & (z >= 5) voxelarray = cube1 | cube2 colors = np.empty(voxelarray.shape, dtype=object) colors[cube1] = 'blue' colors[cube2] = 'red' # 繪制 3D 體素圖 fig = go.Figure(data=go.Volume( x=x.flatten(), y=y.flatten(), z=z.flatten(), value=voxelarray.flatten(), colorscale=["blue", "red"], opacity=0.2, surface_count=17 )) fig.show()
效果:3D 空間中兩個立方體的體素可視化。
擴展思考
1. Plotly與Three.js的深度集成
Plotly 的底層基于 WebGL,可以與 Three.js 深度集成,用于更復(fù)雜的 3D 可視化場景。
// 示例:Three.js 與 Plotly 結(jié)合的偽代碼 // 在 Three.js 場景中嵌入 Plotly 圖表
2. 圖表交互行為的A/B測試設(shè)計
通過 A/B 測試優(yōu)化圖表交互行為,提升用戶體驗。
# 示例:記錄用戶點擊行為 from dash import Dash, dcc, html import dash_bootstrap_components as dbc app = Dash(__name__, external_stylesheets=[dbc.themes.BOOTSTRAP]) app.layout = html.Div([ dcc.Graph(id="graph", figure=px.bar(x=[1, 2, 3], y=[3, 2, 1])), html.Button("Option A", id="button-a"), html.Button("Option B", id="button-b"), html.Div(id="output") ]) @app.callback(Output("output", "children"), [Input("button-a", "n_clicks"), Input("button-b", "n_clicks")]) def update_output(clicks_a, clicks_b): return f"Option A clicks: {clicks_a or 0}, Option B clicks: {clicks_b or 0}" if __name__ == "__main__": app.run_server(debug=True)
效果:記錄用戶對不同選項的偏好。
通過掌握這些核心概念和實戰(zhàn)案例,您將能夠創(chuàng)建出功能強大、交互性強的數(shù)據(jù)可視化作品。
以上就是Python使用Plotly制作交互式圖表的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Python Plotly交互式圖表的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Pytorch學(xué)習(xí)筆記DCGAN極簡入門教程
網(wǎng)上GAN的教程太多了,這邊也談一下自己的理解,本文給大家介紹一下GAN的兩部分組成,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-09-09Python?Pandas如何獲取和修改任意位置的值(at,iat,loc,iloc)
在我們對數(shù)據(jù)進(jìn)行選擇之后,需要對特定的數(shù)據(jù)進(jìn)行設(shè)置更改,設(shè)置,下面這篇文章主要給大家介紹了關(guān)于Python?Pandas如何獲取和修改任意位置的值(at,iat,loc,iloc)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01tensorflow下的圖片標(biāo)準(zhǔn)化函數(shù)per_image_standardization用法
這篇文章主要介紹了tensorflow下的圖片標(biāo)準(zhǔn)化函數(shù)per_image_standardization用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Python3中內(nèi)置類型bytes和str用法及byte和string之間各種編碼轉(zhuǎn)換 問題
這篇文章主要介紹了Python3中內(nèi)置類型bytes和str用法及byte和string之間各種編碼轉(zhuǎn)換問題,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2018-09-09Android 兼容性問題:java.lang.UnsupportedOperationException解決辦法
這篇文章主要介紹了Android 兼容性問題:java.lang.UnsupportedOperationException解決辦法的相關(guān)資料,需要的朋友可以參考下2017-03-03Python筆記之Scipy.stats.norm函數(shù)使用解析
這篇文章主要介紹了Python筆記之Scipy.stats.norm函數(shù)使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02