python - Dash 在回调之间共享 Fig 对象

标签 python plotly plotly-dash

我想在回调中使用 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 创建图形。我希望能够使用功能破折号的 drawrect 功能在 sensor-graph 中标记不同颜色的区域。但是,要在单击“Occupancy”按钮时更改颜色,我需要访问Fig属性来调用“fig.update_layout”,如果我只返回一个新图形,则绘图将重新绘制(不是一个选项,因为图形需要几秒钟才能重绘)。
我这样尝试过(也改变了按钮样式):

@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 返回的是图 dict,而不是我使用的 go.Figure 对象可以使用 update_layout 方法。
所以我的问题是:如何在回调函数之间共享 go.Figure 对象?

最佳答案

您可以从该特定字典中重现 plotly.graph_objects.Figure,您可以在回调中调用 figure =plotly.graph_objects.Figure(fig)

关于python - Dash 在回调之间共享 Fig 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71184103/

相关文章:

python-3.x - python破折号表条件格式色标

python - 对Django中的ForeignKey模型关系感到困惑

python - 如何用下划线替换空格?

python - 如何使用 python 脚本增加 elasticsearch 中的 max_result_window?

python - Unicode编码错误: 'latin-1' codec can't encode characters in position 0-9: ordinal not in range(256)

plotly 表达 : How to add comma separators for thousands on data labels

python - 我应该安装哪个版本的 PyQt(32 与 64)

python - 如何使用 plotly_express 绘制多折线图?

python - 如何创建可拖动的 plotly 对象

python - 有没有更好的方法可以通过 Plotly 使用 Dash 执行多个输出?