Как я могу обработать все мои графики подзаговоров, используя только один слайдер?[Python-Даш] - PullRequest
0 голосов
/ 04 февраля 2019

Я использую структуру подзаговоров для своих графиков, и я хочу, чтобы диапазон по оси X был с помощью ползунка.Я пытаюсь пролистать графики одновременно, но это не работает.Подпрограмма обратного вызова разрушает структуру подплота (созданную с помощью plotly.tools.make_subplots).

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from plotly import tools
from plotly import graph_objs as go

fig = tools.make_subplots(rows=2, shared_xaxes=True)
fig.add_scatter(x=[1,2,3], y=[2,1,2])
fig.add_scatter(x=[1,2,3], y=[5,3,3], yaxis='y2')


external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[

dcc.Graph(
    id='graph1',
    figure = fig
),

dcc.Slider(
    id='temp-slider',
    min=0,
    max=10,
    step=0.2,
    value=0
)

])

@app.callback(
    Output('graph1','figure'), [Input('temp-slider','value')]
)

def update_graph(value): 
    out = dict(
        data = fig.data,
        layout = dict(
            xaxis = dict(
                range = [value,value+1]
            )
        )
    )
    return out


if __name__ == '__main__':
    app.run_server(debug=True)

Мне нужен подплот, который охватывает оба графика с использованием одного и того же ползунка

1 Ответ

0 голосов
/ 06 февраля 2019

Поскольку вы снова воссоздаете график, компоновка подзаговора теряется, просто обновите конкретное свойство range существующего figure.Пожалуйста, обратитесь к приведенному ниже примеру кода и дайте мне знать, если это решит вашу проблему.

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from plotly import tools
from plotly import graph_objs as go

fig = tools.make_subplots(rows=2, shared_xaxes=True)
fig.add_scatter(x=[1,2,3], y=[2,1,2])
fig.add_scatter(x=[1,2,3], y=[5,3,3], yaxis='y2')
fig.layout.xaxis.dtick=0.5

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']

app = dash.Dash(__name__, external_stylesheets=external_stylesheets)

app.layout = html.Div(children=[

dcc.Graph(
    id='graph1',
    figure = fig
),

dcc.Slider(
    id='temp-slider',
    min=0,
    max=10,
    step=0.2,
    value=0
)

])

@app.callback(
    Output('graph1','figure'), [Input('temp-slider','value')]
)

def update_graph(value): 
    fig.layout.xaxis.range = [value,value+1]
    return fig


if __name__ == '__main__':
    app.run_server(debug=True)
...