Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

O gráfico animado não está funcionando

Pessoal, boa tarde!

Tentei copiar o código do gráfico animado e a linha do gráfico não está aparecendo quando aperto o play. Tentei no jupyter e no navegador (exportando a imagem em html) e não funcionou. O código é o seguinte:

import pandas as pd from matplotlib import pyplot as plt import plotly.express as px

df = pd.read_csv("..\resources\canadian_immegration_data.csv")

df.set_index('Country', inplace=True) anos = [str(n) for n in range(1980, 2014)] brasil = df.loc['Brazil', anos] brasil_dict = {'ano': brasil.index.tolist(), 'imigrantes': brasil.values.tolist()} dados_brasil = pd.DataFrame(brasil_dict)

import plotly.graph_objs as go

Criando uma figura

fig = go.Figure()

Adicionando a linha do gráfico e definindo a espessura da linha

fig.add_trace( go.Scatter(x=[dados_brasil['ano'].iloc[0]], y=[dados_brasil['imigrantes'].iloc[0]], mode='lines', name='Imigrantes', line=dict(width=4)) )

Definindo as configurações de layout

fig.update_layout( title=dict( text='Imigração do Brasil para o Canadá no período de 1980 a 2013', x=0.12, xanchor='left', font=dict(size=20) ), xaxis=dict(range=[1980, 2013], autorange=False, title='Ano'), yaxis=dict(range=[0, 3000], autorange=False, title='Número de imigrantes'), updatemenus=[dict( type='buttons', showactive=False, buttons=[dict( label='Play', method='animate', args=[None, {'frame': {'duration': 100, 'redraw': True}, 'fromcurrent': True}] )] )], width=1000, height=500 )

Definir as configurações de animação

frames = [go.Frame(data=[go.Scatter(x=dados_brasil['ano'].iloc[:i+1], y=dados_brasil['imigrantes'].iloc[:i+1])]) for i in range(len(dados_brasil))] fig.frames = frames

fig.write_html('imigracao_america_sul.html')

Mostrando a figura

fig.show()

1 resposta
solução!

Olá, Fabio! tudo bem?

Vamos lá! Antes de criar a figura é necessário mudar o tipo de dados da coluna que contém os anos para int ao invés de manter como string. Você pode fazer isso da seguinte forma:

dados_brasil['ano'] = dados_brasil['ano'].astype(int)

Depois disso, a figura com a animação pode ser obtida com o código abaixo:

import plotly.graph_objs as go

#Criando uma figura
fig = go.Figure()

#Adicionando a linha do gráfico e definindo a espessura da linha
fig.add_trace(
    go.Scatter(x=[dados_brasil['ano'].iloc[0]], y=[dados_brasil['imigrantes'].iloc[0]], mode='lines', name='Imigrantes', line=dict(width=4))
)

#Definindo as configurações de layout
fig.update_layout(
    title=dict(
        text='<b>Imigração do Brasil para o Canadá no período de 1980 a 2013</b>',
        x=0.12,
        xanchor='left',
        font=dict(size=20)
    ),
    xaxis=dict(range=[1980, 2013], autorange=False, title='<b>Ano</b>'),
    yaxis=dict(range=[0, 3000], autorange=False, title='<b>Número de imigrantes</b>'),
    updatemenus=[dict(
        type='buttons',
        showactive=False,
        buttons=[dict(
            label='Play',
            method='animate',
            args=[None, {'frame': {'duration': 100, 'redraw': True}, 'fromcurrent': True}]
        )]
    )],
    width=1000, 
    height=500 
)

#Definindo as configurações de animação
frames = [go.Frame(data=[go.Scatter(x=dados_brasil['ano'].iloc[:i+1], y=dados_brasil['imigrantes'].iloc[:i+1])]) for i in range(len(dados_brasil))]
fig.frames = frames

#Mostrando a figura
fig.show()

Qualquer dúvida não hesite em perguntar!

Bons estudos :)