我想在回调中使用 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/