es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mapa coroplético no cambia con el deslizador. Utilizando plotly y chart_studio.

    Año   País   Código   Total 
0   1751   Reino Unido   GBR   2552    
1   1752   Reino Unido   GBR   2553    
2   1753   Reino Unido   GBR   2553    

# El marco de datos anterior

{'Año': {0: 1751, 1: 1752, 2: 1753, 3: 1754, 4: 1755},
 'País': {0: 'Reino Unido',
  1: 'Reino Unido',
  2: 'Reino Unido',
  3: 'Reino Unido',
  4: 'Reino Unido'},
 'Código del país': {0: 'GBR', 1: 'GBR', 2: 'GBR', 3: 'GBR', 4: 'GBR'},
 'Total (miles de toneladas métricas)': {0: 2552, 1: 2553, 2: 2553, 3: 2554, 
  4: 2555},
 'Combustible sólido': {0: 2552, 1: 2553, 2: 2553, 3: 2554, 4: 2555},
 'Combustible líquido': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
 'Combustible gaseoso': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
 'Cemento': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
 'Quema de gas': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
 'Per cápita': {0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0},
 'Combustibles de bunkering (No incluidos en el total)': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}}

# Esa es la cabecera completa del marco de datos. Anteriormente, solo incluí la columna de total para hacerlo más conciso.

datos = dict(
    type = 'choropleth',
    locations = df_paises['Código del país'],
    z = (df_paises['Total (miles de toneladas métricas)']),
    colorscale="Portland",
    text = df_paises['País'],
    colorbar = {'title' : 'Título'}
  ) 
# Slider
pasos = []
for i in range(len(años)): 
    paso = dict(method='restyle',
            args=['visible', [False] * len(años)],
            label='Año {}'.format(i + 1751))
    paso['args'][1][i] = True
    i +=50
    pasos.append(paso)

deslizadores = [dict(active=0,
            pad={"t": 1},
            steps=pasos)]    
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que puede haber algunos problemas con el código del control deslizante. Aquí hay algunas sugerencias que pueden ayudar:

    1. Asegúrese de que la variable years esté definida e incluya todos los años en el conjunto de datos. Es posible que deba modificar el código para obtener esta variable.
    2. En lugar de agregar 50 a i en cada paso, puede intentar agregar el número de años entre cada paso. Por ejemplo, si hay 5 años entre cada paso, podría usar i += 5 en su lugar.

    3. Verifique la lista args en el diccionario step. Debe incluir el nombre del atributo que desea actualizar (en este caso, "visible"), y una lista de booleanos que correspondan a la visibilidad de cada traza. Asegúrese de que la longitud de esta lista coincida con la longitud de la variable years.

    Aquí hay un fragmento de código actualizado que incorpora estas sugerencias:

    data = dict(
        type='choropleth',
        locations=df_countries['Country Code'],
        z=(df_countries['Total (thousand metric tons)']),
        colorscale="Portland",
        text=df_countries['Country'],
        colorbar={'title': 'Título'}
    )
    
    # definir variable years
    years = df_countries['Year'].unique()
    
    # control deslizante
    steps = []
    for i, year in enumerate(years):
        visible = [False] * len(years)
        visible[i] = True
        step = dict(
            method='restyle',
            args=[{'visible': visible}],
            label='Año {}'.format(year)
        )
        steps.append(step)
    
        # agregar número de años entre cada paso
        if i < len(years) - 1:
            n_years = years[i+1] - year
            i += n_years
    
    sliders = [dict(
        active=0,
        pad={'t': 1},
        steps=steps
    )]
    
    layout = dict(sliders=sliders)
    
    fig = dict(data=[data], layout=layout)
    plotly.offline.iplot(fig)
    

    Este código crea una lista visible que corresponde al índice de cada año en la variable years, y establece la visibilidad de la traza en ese índice como True. También agrega el número de años entre cada paso al índice, para que el control deslizante se mueva en incrementos del intervalo deseado.

Comments are closed.