在Dash Plotly Python中,有没有一种方法可以在开关打开时不断更新图形



我有一个函数,可以使用算法更新图的图形,还有一个回调函数,可以返回图的图形(以及许多其他内容(。这是的基本思想

for i in range(0,5):
time.sleep(0.1)
randomfunction(i)
return plot

如何在不中断循环的情况下更新图形?我尝试过使用yield而不是return,但没有效果,因为回调不希望输出生成器类。

虽然公认的答案确实有效,但对于那些可能想在没有外部存储的情况下做到这一点的人来说,还有另一种方法。

有一个名为dcc.Interval的Dash核心组件,您可以使用它来不断触发回调,在回调中您可以更新图形。

例如,设置一个具有图形布局和以下内容的布局:

import dash_core_components as dcc
dcc.Interval(id="refresh-graph-interval", disabled=False, interval=1000)

然后,在您的回调中:

from dash.exceptions import PreventUpdate
@app.callback(
Output("graph", "figure"), 
[Input("refresh-graph-interval", "n_intervals")]
)
def refresh_graph_interval_callback(n_intervals):
if n_intervals is not None:
for i in range(0,5):
time.sleep(0.1)
randomfunction(i)
return plot
raise PreventUpdate()

Dash中的标准方法是将图形(或仅数据(从循环中写入服务器端缓存(例如磁盘上的文件或Redis缓存(,

for i in range(0,5):
time.sleep(0.1)
randomfunction(i)
# write data to server side cache

然后使用CCD_ 2组件来触发从高速缓存读取并更新图的回调。类似

@app.callback(Output("graph_id", "figure"), Input("interval_id", "n_intervals")):
def update_graph(_):
data = ... # read data from server side cache
figure = ...  # generate figure from data
return figure

最新更新