Dash应用实时饼图数值未更新问题咨询
实时饼图不更新的原因与解决方法
问题原因
- 数据长度不匹配:全局变量
y_values每次回调都会追加新值,导致values数组长度远超labels的2个元素。Plotly饼图要求labels和values长度严格一致,长度不匹配时,多余数据会被忽略,图表无法正常更新。 - 动画参数不兼容:
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
相关产品推荐
相关产品推荐

