Gráficos en vivo usando Dash y Plotly
Python es un lenguaje de programación de propósito general tipado dinámicamente que se utiliza en varios dominios de la informática, como el aprendizaje automático, el desarrollo web, el desarrollo de aplicaciones, el desarrollo de juegos, la ciencia de datos, etc. Está respaldado por una comunidad gigantesca de ingenieros y desarrolladores de software apasionados que lo construyen. y la creación de varias API y bibliotecas.
Una de esas bibliotecas es Dash. Dash es un marco construido sobre Flask, Plotly y ReactJS.
Dash se utiliza para crear paneles interactivos con el lenguaje de programación Python.
Los gráficos en vivo o gráficos en tiempo real son ese tipo de gráficos que cambian con mucha frecuencia en un corto intervalo de tiempo. Las aplicaciones que integran dichos gráficos solo pueden permitirse actualizar (recargar) la página a veces; se reciben algunos datos nuevos porque la carga repetida de una gran cantidad de datos es demasiado costosa y pesada para el servidor y la máquina cliente.
Además, hará que la aplicación sea lenta y difícil de operar. Los gráficos de acciones son el mejor ejemplo de dichos gráficos.
Durante tales situaciones, se utiliza una técnica, a saber, carga en caliente, que actualiza los datos modificados sin modificar el estado de la aplicación. Tenga en cuenta que la carga en caliente difiere de la recarga en vivo, lo que significa actualizar toda la aplicación (recargar) cuando cambian los datos.
En este artículo, aprenderemos cómo crear gráficos en vivo usando Dash con la ayuda de un ejemplo simple.
Gráficos en vivo usando Dash y Plotly
Dividiremos todo el procedimiento en partes más simples para facilitar el proceso de desarrollo y la comprensión.
Instalando las Dependencias
Primero, necesitamos instalar dos dependencias, a saber, dash y plotly. Utilice los siguientes comandos pip para instalarlos.
Se recomienda encarecidamente crear un entorno virtual antes de continuar con los pasos siguientes.
pip install dash pip install plotly Importaciones
Ahora, crea un nuevo archivo, main.py, y agrega todo lo que hablamos antes a ese archivo. Solo se requerirá un único archivo para crear esta sencilla aplicación.
Importaremos guión, aleatorio (para generar valores aleatorios), plotly, plotly.graph_objs para características gráficas, dash_core_components para gráficos, dash_html_components para componentes HTML y Input y Output para devoluciones de llamada.
import dash import random import plotly import plotly.graph_objs as go # graph features import dash_core_components as dcc # graphs import dash_html_components as html # html components from dash.dependencies import Output, Input # callbacks Inicialice la aplicación y los datos
Inicialice una aplicación Dash y dos estructuras de datos deque para almacenar las coordenadas x e y que se trazarán en el gráfico. Consulte el siguiente código de Python para lo mismo.
app = dash.Dash(__name__) xData = [1] yData = [1] Diseño del tablero
Para crear un diseño de tablero, usaremos los componentes HTML de Dash.
app.layout = html.Div( [ dcc.Graph( id="live-graph", animate=True # enable smooth transition upon updation ), dcc.Interval( id="live-graph-interval", interval=1000, # time, in ms, elapsed between two consecutive values n_intervals=0, # number of intervals completed from the start of the server ), ] ) Tenga en cuenta que hemos establecido animar en True porque necesitamos una transición suave cuando se agrega algún punto de datos nuevo al gráfico. Si se establece en False, el gráfico se actualizará abruptamente, lo que puede dificultar la experiencia del usuario.
Actualizar el gráfico en vivo
@app.callback( Output("live-graph", "figure"), [Input("live-graph-interval", "n_intervals")] ) def updateGraph(n): xx = xData[-1] + 1 yy = yData[-1] + (yData[-1] * random.uniform(-0.5, 0.5)) if yy == 0: yy = 1 xData.append(xx) yData.append(yy) data = plotly.graph_objs.Scatter( x=list(xData), y=list(yData), name="Scatter", mode="lines+markers" ) return { "data": [data], "layout": go.Layout( xaxis=dict(range=[min(xData), max(xData)]), yaxis=dict(range=[min(yData), max(yData)]), ), } Ejecutar el servidor
Realice una llamada al run_server() disponible en la aplicación Dash para ejecutar el servidor.
if __name__ == "__main__": app.run_server() Código fuente completo con la salida
A continuación se muestra el código fuente completo, junto con la salida. Tenga en cuenta que aparecerá una URL como salida al ejecutar el script usando python main.py.
Abra esa URL en cualquier navegador web para acceder a la aplicación.
import dash import random import plotly import plotly.graph_objs as go # graph features import dash_core_components as dcc # graphs import dash_html_components as html # html components from dash.dependencies import Output, Input # callbacks app = dash.Dash(__name__) xData = [1] yData = [1] app.layout = html.Div( [ dcc.Graph( id="live-graph", animate=True # enable smooth transition upon updation ), dcc.Interval( id="live-graph-interval", interval=1000, # time, in ms, elapsed between two consecutive values n_intervals=0, # number of intervals completed from the start of the server ), ] ) @app.callback( Output("live-graph", "figure"), [Input("live-graph-interval", "n_intervals")] ) def updateGraph(n): xx = xData[-1] + 1 yy = yData[-1] + (yData[-1] * random.uniform(-0.5, 0.5)) if yy == 0: yy = 1 xData.append(xx) yData.append(yy) data = plotly.graph_objs.Scatter( x=list(xData), y=list(yData), name="Scatter", mode="lines+markers" ) return { "data": [data], "layout": go.Layout( xaxis=dict(range=[min(xData), max(xData)]), yaxis=dict(range=[min(yData), max(yData)]), ), } if __name__ == "__main__": app.run_server() Producción:

