Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

08 Desafío: creando una animación para comparar diferentes datos

Tu tarea es crear un gráfico animado con Plotly que muestre estos datos. El gráfico debe tener las siguientes características:

  • Dos líneas: una para Brasil y otra para Argentina.
  • Un botón "Play" para iniciar la animación, mostrando el aumento o disminución del número de inmigrantes a lo largo de los años.
  • Las configuraciones de animación deben hacer que las dos líneas se muestren y animen al mismo tiempo.

Consejos:

  • Crea un DataFrame con los datos de Argentina y no olvides dejar la columna de años como tipo int (entero).
  • Utiliza el código proporcionado para Brasil como base y adáptalo para incluir los datos de Argentina.
  • Para configurar las animaciones, puedes hacer un bucle for para recorrer el DataFrame datos_brasil y, para cada iteración, crear una nueva lista que contenga dos objetos del tipo go.Scatter, uno para cada país. Luego, cada lista puede ser utilizada para crear un objeto go.Frame, que se agrega a la lista de frames. Finalmente, la lista de frames puede ser asignada al objeto fig, que es la figura del gráfico que se animará. Con esto, cuando se inicie la animación, el gráfico mostrará las dos líneas en movimiento, una para Brasil y otra para Argentina.

import pandas as pd
import plotly.graph_objects as go

# Creación de datos sintéticos (Simulando tendencias 2018-2023)
data = {
'Año': [2018, 2019, 2020, 2021, 2022, 2023] * 4,
'Inmigrantes': [
                12000, 15000, 8000, 11000, 14000, 16000, # Brasil
                10000, 11500, 6000, 9500, 12000, 13000, # Argentina
                8000, 9000, 4500, 7000, 8500, 10000, # Perú
                15000, 18000, 9500, 13000, 17000, 20000 # Colombia
              ],
'País': (['Brasil'] * 6) + (['Argentina'] * 6) + (['Perú'] * 6) + (['Colombia'] * 6)
}

df_migracion = pd.DataFrame(data)

# Filtramos solo para Brasil y Argentina
df_brasil = df_migracion[df_migracion['País'] == 'Brasil'].copy()
df_argentina = df_migracion[df_migracion['País'] == 'Argentina'].copy()

# Aseguramos que el año sea entero
df_brasil['Año'] = df_brasil['Año'].astype(int)
df_argentina['Año'] = df_argentina['Año'].astype(int)

# Estado en el primer año: 2018
fig = go.Figure(
    data=[
        go.Scatter(x=[df_brasil.iloc[0]['Año']], y=[df_brasil.iloc[0]['Inmigrantes']],
                   name='Brasil', mode='lines+markers', line=dict(width=3)),
        go.Scatter(x=[df_argentina.iloc[0]['Año']], y=[df_argentina.iloc[0]['Inmigrantes']],
                   name='Argentina', mode='lines+markers', line=dict(width=3))
    ],
    layout=go.Layout(
        title="Animación de Inmigración: Brasil vs Argentina",
        xaxis=dict(range=[2017, 2024], title="Año"),
        yaxis=dict(range=[0, 17000], title="Número de Inmigrantes"),
        updatemenus=[{
            "type": "buttons",
            "buttons": [{
                "label": "Play",
                "method": "animate",
                "args": [None, {"frame": {"duration": 500, "redraw": True}, "fromcurrent": True}]
            }]
        }]
    )
)

# Creación de los Frames para la animación
frames = []

# Recorremos los datos para Brasil
for i in range(len(df_brasil)):
    lista_scatter = [
        go.Scatter(x=df_brasil.iloc[:i+1]['Año'], y=df_brasil.iloc[:i+1]['Inmigrantes']),
        go.Scatter(x=df_argentina.iloc[:i+1]['Año'], y=df_argentina.iloc[:i+1]['Inmigrantes'])
    ]
    
    # Creamos el objeto Frame y lo añadimos a la lista
    frames.append(go.Frame(data=lista_scatter, name=str(df_brasil.iloc[i]['Año'])))

# Asignamos la lista de frames a la figura
fig.frames = frames

fig.update_layout(template="plotly_white", hovermode="x unified")

fig.show()

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola César, espero que estés bien

Parece que ya tienes un buen comienzo para crear la animación con Plotly. El código que compartiste parece estar bien estructurado. Aquí hay algunos puntos clave para asegurarte de que todo funcione correctamente:

  1. Verifica los Datos: Asegúrate de que los datos en los DataFrames df_brasil y df_argentina estén correctamente formateados y que la columna 'Año' sea de tipo entero.

  2. Configuración de Animación: El bucle for que recorre los datos está configurado para crear un go.Frame para cada año. Esto debería permitir que ambas líneas se animen simultáneamente.

  3. Estilo y Diseño: Puedes personalizar el diseño de tu gráfico usando fig.update_layout para mejorar la apariencia visual, como cambiar colores, estilos de línea, etc.

  4. Revisar Errores: Si la animación no funciona como esperas, revisa la consola del navegador para ver si hay mensajes de error que puedan indicar qué está fallando.

  5. Prueba el Código: Asegúrate de ejecutar el código en un entorno que soporte Plotly, como Jupyter Notebook o un script Python que pueda renderizar gráficos.

Si necesitas hacer ajustes adicionales, podrías considerar cambiar la duración de los frames o modificar el rango de los ejes para mejorar la visualización.

Espero que esto te ayude a completar tu desafío. ¡Buena suerte y sigue adelante!

Espero haber ayudado y buenos estudios!