Dash Python как сделать несколько графиков обновления, как озаглавить

#python #graph #label #plotly-dash

Вопрос:

новый кодер здесь, я пытаюсь сделать 4 графика, которые используют одни и те же случайные данные (хотя позже я планирую разделить их на части). Когда это был всего один график, он отлично обрабатывал случайные данные и автоматически масштабировался. На ходу.макет невозможно указать, какой график вы помечаете. Теперь, когда я добавил несколько, ни у одного из них нет заголовков, меток осей или данных. Пожалуйста, помогите!

 import dash
from dash.dependencies import Output, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly.express as px
import random
import plotly.graph_objs as go
from collections import deque
#setting first points
X = deque(maxlen = 20)
X.append(1)
Y = deque(maxlen = 20)
Y.append(1)
#app settings, html layout
app = dash.Dash(__name__)
  
app.layout = html.Div(children=[
    html.H1([
        html.H1(children='Graphs'),
        dcc.Graph(id = 'Battery Voltage', animate = True),
        dcc.Interval(
            id = 'graph-update',
            interval = 1000,
            n_intervals = 0
        ),
    ],
),
html.Div(
    [
        dcc.Graph(id = 'Signal', animate = True),
        dcc.Interval(
            id = 'graph-update2',
            interval = 1000,
            n_intervals = 0
        ),
    ],
),
html.Div(
    [
        dcc.Graph(id = 'Health', animate = True),
        dcc.Interval(
            id = 'graph-update3',
            interval = 1000,
            n_intervals = 0
        ),
    ],
),
html.Div(
    [
        dcc.Graph(id = 'Prognastics', animate = True),
        dcc.Interval(
            id = 'graph-update4',
            interval = 1000,
            n_intervals = 0
        ),
    ],
)])

#this is what keeps the graph updating 
@app.callback(
    [Output('Battery Voltage', 'figure'),
     Output('Signal', 'figure'),
     Output('Health', 'figure'),
     Output('Prognastics', 'figure')],
    [ Input('graph-update', 'n_intervals'),
      Input('graph-update2', 'n_intervals'),
      Input('graph-update3', 'n_intervals'),
      Input('graph-update4', 'n_intervals')]
)
  
def update_graph_scatter(n):

    X.append(X[-1] 1)
    Y.append(Y[-1] Y[-1] * random.uniform(-0.1,0.1))
    data = go.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines markers'
    )
  
    return {'data': [data],
            'layout' : go.Layout(title="Battery Voltage",
                                 xaxis_title="Time",
                                 yaxis_title="Voltage",
                                 xaxis=dict(range=[min(X),max(X)]),
                                 yaxis = dict(range = [min(Y),max(Y)])
                                 )
            }

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


 

При запуске с несколькими

Только один

Ответ №1:

если у кого-то еще есть эта проблема, определение должно быть получено сразу после их обратного вызова. Наверное, мое форматирование тоже было плохим. Это должно выглядеть так:

 @app.callback(Output('Health', 'figure'),
              Input('graph-update3', 'n_intervals'))

def update_graph3(n): 
    X.append(X[-1] 1)
    Y.append(Y[-1] Y[-1] * random.uniform(-0.1,0.1))
    #those are random points, we'd socket something in
    data = go.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines markers'
    )
    print("data:", data)
    return {'data': [data],
            'layout' : go.Layout(title="Health",
                                 xaxis_title="Time",
                                 yaxis_title="Health",
                                 xaxis=dict(range=[min(X),max(X)]),
                                 yaxis = dict(range = [min(Y),max(Y)])
                                 )
            }