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.
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.