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

[Projeto] Desafio tendências de imigração

Segue minha solução do desafio da aula de visualização de dados:

import pandas as pd 
import matplotlib.pyplot as plt
df = pd.read_csv(r"meus dados")
df.set_index("País", inplace=True)
anos = list(map(str, range(1980, 2014)))
Brasil = df.loc['Brasil', anos]
Argentina = df.loc['Argentina', anos]
Brasil_dict = {'Ano': Brasil.index.tolist(), 'Imigrantes':Brasil.values.tolist()}
Dados_Brasil = pd.DataFrame(Brasil_dict)
Dados_Brasil.set_index("Ano")
Argentina_dict = {'Ano': Argentina.index.tolist(), 'Imigrantes':Argentina.values.tolist()}
Dados_Argentina = pd.DataFrame(Argentina_dict) 
plt.figure(figsize=(10,4))
plt.plot(Dados_Brasil['Ano'], Dados_Brasil['Imigrantes'], label="Brasil", marker='x')
plt.plot(Dados_Argentina['Ano'], Dados_Argentina['Imigrantes'], label="Argentina", marker='+')
plt.legend()
plt.title('Imigração para o Canadá')
plt.xlabel('Anos')
plt.ylabel('Imigrantes')
plt.xticks(['1980','1985','1990', '1995', '2000', '2005', '2010'])

plt.show()

Tentei dar uma brincada com os markers usando a documentação da matplotlib disponível em https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers, mas acredito que não tenha sido a melhor solução.

Minha única dúvida foi, como posso colocar rótulos de dados? gostaria que cada ponto no gráfico tivesse sua devida identificação para melhor entendimento dos dados.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá Vinícius, tudo bem com você?

Sua solução está muito bem estruturada, parabéns. A ideia de personalizar os markers demonstra que você está explorando bem as possibilidades da Matplotlib.

Para adicionar rótulos de dados em cada ponto do gráfico, você pode usar o método plt.text(), que permite adicionar textos posicionados no gráfico, usando a seguinte sintaxe básica:

plt.text(x, y, texto, fontsize, ha, color) 

Onde:

  • x e y definem a posição (coordenadas) onde o texto será exibido
  • texto é o conteúdo a ser mostrado, como valores ou rótulos
  • Os parâmetros fontsize (tamanho da fonte), ha (alinhamento horizontal, como 'center') e color (cor do texto) ajudam a personalizar o rótulo

Para o seu código a implementação fica da seguinte forma:

# Adicionando rótulos de dados 
for i in range(len(Dados_Brasil)): 
    plt.text(Dados_Brasil['Ano'][i], Dados_Brasil['Imigrantes'][i], f"{Dados_Brasil['Imigrantes'][i]}", fontsize=8, ha='center', color='blue') 
for i in range(len(Dados_Argentina)): 
    plt.text(Dados_Argentina['Ano'][i], Dados_Argentina['Imigrantes'][i], f"{Dados_Argentina['Imigrantes'][i]}", fontsize=8, ha='center', color='green') 

No código acima, estamos percorremos os dados de Brasil e Argentina com for para posicionar cada rótulo na coordenada correspondente. Deixo abaixo o seu código com essa implementação adicionada:

import pandas as pd 
import matplotlib.pyplot as plt 

df = pd.read_csv(r"meus dados") 
df.set_index("País", inplace=True) 
anos = list(map(str, range(1980, 2014))) 

Brasil = df.loc['Brasil', anos] 
Argentina = df.loc['Argentina', anos] 

Brasil_dict = {'Ano': Brasil.index.tolist(), 'Imigrantes': Brasil.values.tolist()} 
Dados_Brasil = pd.DataFrame(Brasil_dict) 
Argentina_dict = {'Ano': Argentina.index.tolist(), 'Imigrantes': Argentina.values.tolist()} 
Dados_Argentina = pd.DataFrame(Argentina_dict)

plt.figure(figsize=(10, 4)) 
plt.plot(Dados_Brasil['Ano'], Dados_Brasil['Imigrantes'], label="Brasil") 
plt.plot(Dados_Argentina['Ano'], Dados_Argentina['Imigrantes'], label="Argentina") 

# Adicionando rótulos de dados 
for i in range(len(Dados_Brasil)): 
    plt.text(Dados_Brasil['Ano'][i], Dados_Brasil['Imigrantes'][i], f"{Dados_Brasil['Imigrantes'][i]}", fontsize=8, ha='center', color='blue') 
for i in range(len(Dados_Argentina)): 
    plt.text(Dados_Argentina['Ano'][i], Dados_Argentina['Imigrantes'][i], f"{Dados_Argentina['Imigrantes'][i]}", fontsize=8, ha='center', color='green') 

plt.legend() 
plt.title('Imigração para o Canadá') 
plt.xlabel('Anos') 
plt.ylabel('Imigrantes') 
plt.xticks(['1980', '1985', '1990', '1995', '2000', '2005', '2010']) 
plt.grid(alpha=0.3) 

plt.show()

Imagem apresentando o resultado da execução do código anterior

Um spoiler das próximas aulas, na atividade adicionando anotações será apresentado com detalhes sobre como você pode fazer uso do método plt.text().

Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado