欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python使用Plotly制作交互式圖表的操作指南

 更新時間:2025年07月22日 11:03:43   作者:帶娃的IT創(chuàng)業(yè)者  
Plotly是一款用來做數(shù)據(jù)分析和可視化的在線平臺,功能真的是非常強大,本文將以Plotly為主介紹python中制作交互式圖表的典型用法和高級技巧,需要的朋友可以參考下

引言

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)

通過 updatemenussliders 實現(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)文章

最新評論