Я использую Dash для отображения некоторых данных. В настоящее время у меня есть кластеризованная гистограмма с двумя наборами данных (по одному для каждой гистограммы в кластерах). Эти наборы данных имеют свое имя и соответствующий цвет гистограмм, отображаемых в верхнем левом углу рисунка. На них можно нажимать, чтобы включать и выключать, что приведет к удалению их соответствующих баров с графика.
Отдельно у меня есть контрольный список предметов, которые можно отобразить на графике. Я использую функцию обратного вызова для обновления графика, чтобы он отображал только то, что проверял пользователь. Это обновляет график, как и ожидалось, однако также сбрасывает столбцы / наборы данных, так что оба они включены. То есть. если вы выберете только одну из полос, а затем выберите несколько новых элементов контрольного списка, отобразятся новые элементы контрольного списка и обе полосы.
Я думаю, что логический способ сделать это - передать некоторую переменную в качестве второго входа в функцию обратного вызова, а затем настроить выводимое значение внутри функции, чтобы отображать только правильные столбцы. Тем не менее, я не могу найти переменную, которая содержит эти данные.
Из того, что я могу сказать, доступными свойствами объекта графа Plotly являются 'id', 'clickData', 'clickAnnotationData', 'hoverData', 'clear_on_unhover', 'selectedData', 'relayoutData', 'figure', 'style', 'className', 'animate', 'animation_options', 'config' и 'loading_state'.
Я исследовал все это, и, похоже, ни один из них не содержит данных, которые я ищу. Кто-нибудь знает простой способ получить доступ к этим данным?
Вот как сейчас работает мой обратный вызов:
@app.callback(
dash.dependencies.Output('theGraph', 'figure'),
[dash.dependencies.Input('theChecklist','values'),
dash.dependencies.Input('theGraph', 'clickData')
]
)
def updateGraph(checklistValues, figureInput):
#print to see what the variables hold
print(checklistValues)
print(figureInput)
figure=go.Figure(
data = [
go.Bar(
x = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName').size().index,
y = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName').size().values,
name = 'Bar 1'
),
go.Bar(
x = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName')['# cores'].sum().reset_index()['MyColumnName'],
y = df[df['MyColumnName'].isin(checklistValues)].groupby('MyColumnName')['# cores'].sum().reset_index()['MyOtherColumnName'],
name = 'Bar 2'
)
],
layout=go.Layout(
title='The Title',
showlegend=True,
legend=go.layout.Legend(
x=0,
y=1.0
),
margin=go.layout.Margin(l=40, r=40, t=40, b=110)
)
)
return figure