Description
Since only a single Output is allowed in a callback, and all Inputs must feed into it, how can we determine which input is being triggered during a callback? I have three time-series line plots that I want to cross-filter, and update, any time a range is selected in any of the other plots. For example, the range of Plot A should update when either the range of Plot B or Plot C is updated. But the callback collects the ranges from all plots simultaneously. Is there a way to get the id of which input was triggered during a callback?
Here is my code but it only updates with data from plotB, when it is triggered. When I update Plot C the datac variable is indeed updated but the data from plotB is also passed in again, so the callback function has no knowledge of which plot is actually triggering new input.
@app.callback(
Output('plotA', 'figure'),
[Input('plotB', 'relayoutData'),
Input('plotC', 'relayoutData')])
def display_selected_data(data, datac):
print('data', data)
print('datac', datac)
startx = 'xaxis.range[0]' in data if data else None
endx = 'xaxis.range[1]' in data if data else None
# define the new xrange
if startx and endx:
xrange = [data['xaxis.range[0]'], data['xaxis.range[1]']]
elif startx and not endx:
xrange = [data['xaxis.range[0]'], thedates.max()]
elif not startx and endx:
xrange = [thedates.min(), data['xaxis.range[1]']]
else:
xrange = None
traces = [go.Scatter(
x=thedates,
y=mdf['uniqvisits'])]
return {
'data': traces,
'layout': get_layout('Unique Visits', 'Date', 'Unique Visits', xrange=xrange)
}