Dash 在回调之间共享无花果对象

Dash share fig object between callbacks

我想在回调中使用 fig.update_layout 方法,我当前的程序如下所示:

app.layout = html.Div([
    dcc.Graph(
        id="sensor-graph",
        config={
            'modeBarButtonsToAdd': [
                "drawrect",
                "eraseshape"
            ]
        },
        style={"display": "none"}
    ),
    html.Button('Occupancy', id="occupancy", n_clicks=0, style={'font-size': '12px', 'width': '140px', 'height':'37px', "background-color": "#7FFFD4"}),
])

然后我在 Output('sensor-graph', 'figure') 的回调中动态地为我的 dcc-graph 创建图形。我希望能够在 sensor-graph 中用 drawrect 功能破折号标记不同颜色的区域。但是要在单击 Occupancy 按钮时更改颜色,我需要访问 fig 属性以调用 fig.update_layout,如果我只是 return 一个新图形,绘图将重绘(这不是一个选项因为图表需要几秒钟才能重新绘制)。
我这样试过(也改变了按钮样式):

@app.callback(
    [Output("occupancy", "style"), Output("occupancy", "children")],
    Input("occupancy", "n_clicks"),
    [State('sensor-graph', 'figure'), State('occupancy', 'children')]
)
def change_color(_, fig, curr_name):
        fig.update_layout({
            "fillcolor": "green" if curr_name == "No Occupancy" else "red"
        })
        return {"background-color": "#7FFFD4" if curr_name == "No Occupancy" else "#F08080"}, "Occupancy" if curr_name == "No Occupancy" else "No Occupancy"

但是我收到以下错误 AttributeError: 'dict' object has no attribute 'update_layout' 因为 Dash return 的数字字典不是 go.Figure 对象,我可以使用 update_layout 方法。
所以我的问题是:如何在回调函数之间共享 go.Figure 对象?

您可以从那个特定的词典中复制 plotly.graph_objects.Figure,您在回调中调用 figure = plotly.graph_objects.Figure(fig)