how python animation slider data-visualization plotly

how - Plotly animado deslizante en Python



plotly python (4)

Estaba intentando recrear este ejemplo en un cuaderno de Jupyter.

https://plot.ly/python/gapminder-example/

pero estaba recibiendo este error:

PlotlyDictKeyError: ''slider'' is not allowed in ''layout'' Path To Error: [''layout''][''slider''] Valid attributes for ''layout'' at path [''layout''] under parents [''figure'']: [''angularaxis'', ''annotations'', ''autosize'', ''bargap'', ''bargroupgap'', ''barmode'', ''barnorm'', ''boxgap'', ''boxgroupgap'', ''boxmode'', ''calendar'', ''direction'', ''dragmode'', ''font'', ''geo'', ''height'', ''hiddenlabels'', ''hiddenlabelssrc'', ''hidesources'', ''hoverlabel'', ''hovermode'', ''images'', ''legend'', ''mapbox'', ''margin'', ''orientation'', ''paper_bgcolor'', ''plot_bgcolor'', ''radialaxis'', ''scene'', ''separators'', ''shapes'', ''showlegend'', ''sliders'', ''smith'', ''ternary'', ''title'', ''titlefont'', ''updatemenus'', ''width'', ''xaxis'', ''yaxis''] Run `<layout-object>.help(''attribute'')` on any of the above. ''<layout-object>'' is the object at [''layout'']

La animación se ejecuta sin el control deslizante agregado al diseño y el control deslizante es visible y operativo, pero no cambia el gráfico. Cuando muevo el control deslizante produce el siguiente error en la consola:

Uncaught (in promise) undefined



Necesita plotly >= 2.0.0 intente pip install plotly --upgrade


Probablemente esté golpeando este error debido a un error tipográfico en ese cuaderno. Debería ser sliders lugar de sliders slider , consulte los docs .

El otro error también parece ser causado por este error tipográfico. Parece que este código está en un controlador de eventos que se activa cada vez que mueves el control deslizante.

Así que debajo de la línea (y similares):

figure[''layout''][''slider'']

debe corregirse a:

figure[''layout''][''sliders'']

Aquí está el código para ese ejemplo:

import plotly.plotly as py import plotly.graph_objs as go from plotly.grid_objs import Grid, Column from plotly.tools import FigureFactory as FF import pandas as pd import time url = ''https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv'' dataset = pd.read_csv(url) table = FF.create_table(dataset.head(10)) py.iplot(table, filename=''animations-gapminder-data-preview'') years_from_col = set(dataset[''year'']) years_ints = sorted(list(years_from_col)) years = [str(year) for year in years_ints] years.remove(''1957'') # make list of continents continents = [] for continent in dataset[''continent'']: if continent not in continents: continents.append(continent) columns = [] # make grid for year in years: for continent in continents: dataset_by_year = dataset[dataset[''year''] == int(year)] dataset_by_year_and_cont = dataset_by_year[dataset_by_year[''continent''] == continent] for col_name in dataset_by_year_and_cont: # each column name is unique column_name = ''{year}_{continent}_{header}_gapminder_grid''.format( year=year, continent=continent, header=col_name ) a_column = Column(list(dataset_by_year_and_cont[col_name]), column_name) columns.append(a_column) # upload grid grid = Grid(columns) url = py.grid_ops.upload(grid, ''gapminder_grid''+str(time.time()), auto_open=False) figure = { ''data'': [], ''layout'': {}, ''frames'': [], ''config'': {''scrollzoom'': True} } # fill in most of layout figure[''layout''][''xaxis''] = {''range'': [30, 85], ''title'': ''Life Expectancy'', ''gridcolor'': ''#FFFFFF''} figure[''layout''][''yaxis''] = {''title'': ''GDP per Capita'', ''type'': ''log'', ''gridcolor'': ''#FFFFFF''} figure[''layout''][''hovermode''] = ''closest'' figure[''layout''][''plot_bgcolor''] = ''rgb(223, 232, 243)'' figure[''layout''][''sliders''] = { ''args'': [ ''slider.value'', { ''duration'': 400, ''ease'': ''cubic-in-out'' } ], ''initialValue'': ''1952'', ''plotlycommand'': ''animate'', ''values'': years, ''visible'': True } figure[''layout''][''updatemenus''] = [ { ''buttons'': [ { ''args'': [None, {''frame'': {''duration'': 500, ''redraw'': False}, ''fromcurrent'': True, ''transition'': {''duration'': 300, ''easing'': ''quadratic-in-out''}}], ''label'': ''Play'', ''method'': ''animate'' }, { ''args'': [[None], {''frame'': {''duration'': 0, ''redraw'': False}, ''mode'': ''immediate'', ''transition'': {''duration'': 0}}], ''label'': ''Pause'', ''method'': ''animate'' } ], ''direction'': ''left'', ''pad'': {''r'': 10, ''t'': 87}, ''showactive'': False, ''type'': ''buttons'', ''x'': 0.1, ''xanchor'': ''right'', ''y'': 0, ''yanchor'': ''top'' } ] sliders_dict = { ''active'': 0, ''yanchor'': ''top'', ''xanchor'': ''left'', ''currentvalue'': { ''font'': {''size'': 20}, ''prefix'': ''Year:'', ''visible'': True, ''xanchor'': ''right'' }, ''transition'': {''duration'': 300, ''easing'': ''cubic-in-out''}, ''pad'': {''b'': 10, ''t'': 50}, ''len'': 0.9, ''x'': 0.1, ''y'': 0, ''steps'': [] } custom_colors = { ''Asia'': ''rgb(171, 99, 250)'', ''Europe'': ''rgb(230, 99, 250)'', ''Africa'': ''rgb(99, 110, 250)'', ''Americas'': ''rgb(25, 211, 243)'', #''Oceania'': ''rgb(9, 255, 255)'' ''Oceania'': ''rgb(50, 170, 255)'' } col_name_template = ''{year}_{continent}_{header}_gapminder_grid'' year = 1952 for continent in continents: data_dict = { ''xsrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''lifeExp'' )), ''ysrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''gdpPercap'' )), ''mode'': ''markers'', ''textsrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''country'' )), ''marker'': { ''sizemode'': ''area'', ''sizeref'': 200000, ''sizesrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''pop'' )), ''color'': custom_colors[continent] }, ''name'': continent } figure[''data''].append(data_dict) for year in years: frame = {''data'': [], ''name'': str(year)} for continent in continents: data_dict = { ''xsrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''lifeExp'' )), ''ysrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''gdpPercap'' )), ''mode'': ''markers'', ''textsrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''country'' )), ''marker'': { ''sizemode'': ''area'', ''sizeref'': 200000, ''sizesrc'': grid.get_column_reference(col_name_template.format( year=year, continent=continent, header=''pop'' )), ''color'': custom_colors[continent] }, ''name'': continent } frame[''data''].append(data_dict) figure[''frames''].append(frame) slider_step = {''args'': [ [year], {''frame'': {''duration'': 300, ''redraw'': False}, ''mode'': ''immediate'', ''transition'': {''duration'': 300}} ], ''label'': year, ''method'': ''animate''} sliders_dict[''steps''].append(slider_step) figure[''layout''][''sliders''] = [sliders_dict] py.icreate_animations(figure, ''gapminder_example''+str(time.time()))

Nota: ¡Extraño, pero el código se ejecutó correctamente para mí con el error tipográfico mencionado anteriormente también!

Salida de Demo .


Actualizar:

Revisé el gráfico que tienes, a veces observo el error que se muestra a continuación.

Incapacitado (en promesa) indefinido

Este error puede deberse a que falta un clic u otro evento, pero esto se encuentra internamente dentro del archivo plotly.js , si usted va al enlace de https://plot.ly/python/gapminder-example/ y a la sección de slider animation del slider animation , haga clic en reproducir y haga clic en el control deslizante mientras se reproduce. En ejecución obtenemos este error, incluso cuando hago clic en pausa, obtengo este error. Pero la animación sigue reproduciéndose si presiono el juego nuevamente, ¡por lo tanto no hay un gran impacto! Es solo que un evento no se maneja adecuadamente.

Entonces, como en el caso del gráfico que proporcionaste, puedo hacer que la animación funcione bien, aunque recibo el error (Sin Uncaught (in promise) undefined ) ¡Todavía puedo reproducir la animación!

Puedes usar iplot(fig, validate=False) o plot(fig) para mostrar los gráficos en Python con la animación.

Responder:

El error se debe a que el objeto de layout tiene una propiedad llamada sliders slider no sliders slider , por lo que siempre que esté utilizando el slider en el diseño, cambie esto, también esta trama es muy complicada y puede tener otros errores, por favor comparta el código para la depuración. Pero por ahora esta será mi respuesta.

Antes de:

[''layout''][''slider'']

Después:

[''layout''][''sliders'']

Reemplace todas las propiedades del slider que están relacionadas con el diseño, estas deben cambiarse a sliders .

Referencias:

He manejado problemas relacionados con este particular gráfico deslizante animado de Plotly. Consúltelos si es necesario, ¡pueden ayudar a resolver su problema!

  1. Gráfico de burbujas animado de Plotly No hay datos en el gráfico
  2. Plotly Error Invalid Figure o argumento de datos
  3. Animaciones Plotly Icreate sin conexión en el cuaderno Jupyter