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