Я хотел бы реализовать несколько фильтров данных для предварительного выбора данных по определенным критериям. Этими фильтрами должны быть сами диаграммы, то есть круговая диаграмма (например, где можно выбрать континент) и временная линия (например, где можно выбрать временной интервал). Самое главное, мне нужно применить несколько фильтров из диаграмм с множественными значениями без их сброса каждый раз, когда я фильтрую, выбирая другую диаграмму .
Однако я не знаю, как это реализовать. Я нашел что-то старое, используя dash.dependencies.Events, но это больше не поддерживается.
Всякий раз, когда я фильтрую по критерию на диаграмме А, а затем хочу фильтровать по другому критерию из диаграммы Б, диаграмма А сбрасывается.
Поскольку это, вероятно, ситуация, с которой сталкиваются многие люди, и поскольку dash, похоже, не поддерживает это изначально, я хотел спросить, есть ли у кого-нибудь обходной путь?
// edit: Вот простой пример. Я могу отфильтровать, нажав на точку данных на гистограмме выше. Но всякий раз, когда я нажимаю на точку на линейном графике ниже, он сбрасывает настройки из гистограммы. Я хочу оставить оба.
import datetime
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly
from dash.dependencies import Input, Output
external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)
app.layout = html.Div([
dcc.Graph(id='graph')
])
# Multiple components can update everytime interval gets fired.
@app.callback(Output('graph', 'figure'),
[Input('graph', 'selectedData')])
def update_graph_live(input):
print(input)
data = {
'x': [1,2,3,4,5],
'y': [1,2,3,4,5],
'a': [0,-1,-2],
'b': [100,101,102]
}
# Create the graph with subplots
fig = plotly.tools.make_subplots(rows=2, cols=1, vertical_spacing=0.2)
fig['layout']['margin'] = {
'l': 30, 'r': 10, 'b': 30, 't': 10
}
fig['layout']['legend'] = {'x': 0, 'y': 1, 'xanchor': 'left'}
fig['layout']['clickmode'] = 'event+select'
fig.append_trace({
'x': data['x'],
'y': data['y'],
'name': 'xy',
'type': 'bar',
}, 1, 1)
fig.append_trace({
'x': data['a'],
'y': data['b'],
'name': 'ab',
'mode': 'lines+markers',
'type': 'scatter'
}, 2, 1)
return fig
if __name__ == '__main__':
app.run_server(debug=True)