Saltar al contenido

Actualizar en vivo solo los datos en Dash/plotly

Indagamos en distintos sitios y de este modo tenerte la solución a tu inquietud, en caso de alguna pregunta déjanos tu duda y te contestaremos porque estamos para ayudarte.

Solución:

si agregas animate=True para usted dcc.Graph las trazas alternadas y el zoom/marcador/lo que sea seleccionado se mantienen, pero esto no funciona para gráficos de barras (aunque debería funcionar: https://github.com/plotly/plotly.js/pull/1143). Además, en lugar de devolver la totalidad figure, solo tendría que devolver los rastros.

La mejor solución posible que se me ocurrió es dividirlo en dos gráficos, pero obtendría al menos la mayor parte de la funcionalidad deseada.

ingrese la descripción de la imagen aquí

import dash
from dash.dependencies import Output, Event
import dash_core_components as dcc
import dash_html_components as html
from random import random
import plotly

app = dash.Dash(__name__)
app.layout = html.Div(
    html.Div([
        dcc.Graph(id='live-update-graph-scatter', animate=True),
        dcc.Graph(id='live-update-graph-bar'),
        dcc.Interval(
            id='interval-component',
            interval=1*1000
        )
    ])
)


@app.callback(Output('live-update-graph-scatter', 'figure'),
              events=[Event('interval-component', 'interval')])
def update_graph_scatter():

    traces = list()
    for t in range(2):
        traces.append(plotly.graph_objs.Scatter(
            x=[1, 2, 3, 4, 5],
            y=[(t + 1) * random() for i in range(5)],
            name='Scatter '.format(t),
            mode= 'lines+markers'
            ))
    return 'data': traces

@app.callback(Output('live-update-graph-bar', 'figure'),
              events=[Event('interval-component', 'interval')])
def update_graph_bar():

    traces = list()
    for t in range(2):
        traces.append(plotly.graph_objs.Bar(
            x=[1, 2, 3, 4, 5],
            y=[(t + 1) * random() for i in range(5)],
            name='Bar '.format(t)
            ))
    layout = plotly.graph_objs.Layout(
    barmode='group'
)
    return 'data': traces, 'layout': layout


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

Para el Gráfica de barra, caja e histograma, Uds no debería usaranimate=True de lo contrario, la trama estará fuera del área de trazado. También, Evento ha sido desaprobado por Dash Plotly, use Aporte en lugar de.

import dash
from dash.dependencies import Output,Input
import dash_core_components as dcc
import dash_html_components as html
from random import random
import plotly

app = dash.Dash(__name__)
app.layout = html.Div(
    html.Div([
        dcc.Graph(id='live-update-graph-scatter', animate=True),
        dcc.Graph(id='live-update-graph-bar'),
        dcc.Interval(
            id='interval-component',
            interval=1*1000
        )
    ])
)


@app.callback(Output('live-update-graph-scatter', 'figure'),
              [Input('interval-component', 'interval')])
def update_graph_scatter():

    traces = list()
    for t in range(2):
        traces.append(plotly.graph_objs.Scatter(
            x=[1, 2, 3, 4, 5],
            y=[(t + 1) * random() for i in range(5)],
            name='Scatter '.format(t),
            mode= 'lines+markers'
            ))
    return 'data': traces

@app.callback(Output('live-update-graph-bar', 'figure'),
              [Input('interval-component', 'interval')])
def update_graph_bar():

    traces = list()
    for t in range(2):
        traces.append(plotly.graph_objs.Bar(
            x=[1, 2, 3, 4, 5],
            y=[(t + 1) * random() for i in range(5)],
            name='Bar '.format(t)
            ))
    layout = plotly.graph_objs.Layout(
    barmode='group'
)
    return 'data': traces, 'layout': layout


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

Recuerda algo, que puedes agregar una reseña si te fue preciso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *