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

Dash应用实时饼图数值未更新问题咨询

实时饼图不更新的原因与解决方法

问题原因

  1. 数据长度不匹配:全局变量y_values每次回调都会追加新值,导致values数组长度远超labels的2个元素。Plotly饼图要求labels和values长度严格一致,长度不匹配时,多余数据会被忽略,图表无法正常更新。
  2. 动画参数不兼容:dcc.Graph设置了animate=True,但饼图没有内置动画过渡逻辑,该参数会干扰图表的正常渲染更新。

解决方法

  • 放弃全局数组存储数据,每次回调生成与labels长度匹配的新数据组(按照你注释里的需求,用当前值计算出对应的两个值)。
  • 移除dcc.Graph的animate=True参数,避免不必要的干扰。
  • 每次回调构造完整、长度一致的labels和values数组。

修改后的代码

import dash
from dash import dcc, html
from dash.dependencies import Input, Output
import plotly.graph_objs as go
import random

labels = ['Mom', 'Max']

# Initialize the dash app
app = dash.Dash()

app.layout = html.Div([
    dcc.Graph(id='live-graph', responsive=True),
    dcc.Interval(
        id='graph-update',
        interval=1000,
        n_intervals=0
    ),
])

@app.callback(Output('live-graph', 'figure'), [Input('graph-update', 'n_intervals')])
def update_graph(n):
    current_value = random.randint(2000, 8000)
    # 生成与labels匹配的两个值,符合注释需求:第二个值=6000-第一个值
    y_values = [current_value, 6000 - current_value]
    
    trace = go.Pie(labels=labels, values=y_values)
    layout = go.Layout(title='Real-time Data')
    
    return go.Figure(data=[trace], layout=layout)

if __name__ == '__main__':
    app.run_server(host="192.168.178.26", port=8050, debug=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:35:29