You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将静态Gauge图表改造为数值可动态更新的图表?

实现动态变更数值的Gauge图表

下面提供两种实用的实现方案,你可以根据使用场景选择:

方式一:用Plotly Dash构建交互式网页(支持手动/自动实时更新)

Dash是Plotly官方的交互式框架,能快速搭建网页端的动态控件,既支持手动调整数值,也能设置自动定时更新。

代码示例(带滑块控件手动调整)

import dash
from dash import dcc, html, Input, Output
import plotly.graph_objects as go

# 初始化Dash应用
app = dash.Dash(__name__)

# 页面布局:滑块控件 + Gauge图表容器
app.layout = html.Div([
    # 数值调整滑块,范围0-380,步长5
    dcc.Slider(
        id='speed-slider',
        min=0,
        max=380,
        value=180,
        marks={i: str(i) for i in range(0, 381, 60)},
        step=5
    ),
    # 渲染Gauge图表的组件
    dcc.Graph(id='dynamic-gauge')
])

# 回调函数:监听滑块值变化,实时更新图表
@app.callback(
    Output('dynamic-gauge', 'figure'),
    Input('speed-slider', 'value')
)
def update_gauge(current_value):
    fig = go.Figure(go.Indicator(
        mode="gauge+number+delta",
        value=current_value,
        domain={'x': [0, 1], 'y': [0, 1]},
        title={'text': "Speed"},
        delta={'reference': 380}  # 启用你注释的参考值
    ))
    # 可选:添加背景样式优化视觉效果
    fig.update_layout(paper_bgcolor="lightgray")
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

扩展:自动定时更新

如果需要无需手动操作的自动刷新,把滑块替换为dcc.Interval组件即可,示例代码如下:

import dash
from dash import dcc, html, Input, Output
import plotly.graph_objects as go

app = dash.Dash(__name__)

# 布局替换为定时组件 + 图表
app.layout = html.Div([
    # 每1秒触发一次更新
    dcc.Interval(id='interval-component', interval=1000, n_intervals=0),
    dcc.Graph(id='dynamic-gauge')
])

# 基于定时信号生成动态数值
@app.callback(
    Output('dynamic-gauge', 'figure'),
    Input('interval-component', 'n_intervals')
)
def update_gauge_auto(n):
    # 此处可替换为实时数据源(如传感器数据、接口返回值)
    current_value = (n * 5) % 380
    fig = go.Figure(go.Indicator(
        mode="gauge+number+delta",
        value=current_value,
        domain={'x': [0, 1], 'y': [0, 1]},
        title={'text': "Speed"},
        delta={'reference': 380}
    ))
    return fig

if __name__ == '__main__':
    app.run_server(debug=True)

方式二:离线环境下的动画Gauge(适合脚本演示)

如果不需要网页交互,只是生成一段自动变化的动画演示,可以用Plotly的Frame功能:

import plotly.graph_objects as go

# 创建基础Gauge结构
fig = go.Figure()

# 添加Gauge核心组件
fig.add_trace(go.Indicator(
    mode="gauge+number+delta",
    value=0,
    domain={'x': [0, 1], 'y': [0, 1]},
    title={'text': "Speed"},
    delta={'reference': 380}
))

# 生成动画帧:数值从0到380,每20为一个节点
frames = [go.Frame(data=[go.Indicator(value=v)]) for v in range(0, 381, 20)]

# 配置动画控制按钮
fig.frames = frames
fig.update_layout(
    updatemenus=[{
        'type': 'buttons',
        'showactive': False,
        'buttons': [{
            'label': 'Play',
            'method': 'animate',
            'args': [None, {'frame': {'duration': 300, 'redraw': True}, 'fromcurrent': True}]
        }, {
            'label': 'Pause',
            'method': 'animate',
            'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate'}]
        }]
    }]
)

# 展示动画
fig.show()

内容的提问来源于stack exchange,提问作者JAGADEESH UNDAVALLI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:05:19