2
respostas

[Dúvida] Erro ao plotar gráfico

Eu não consigo achar o problema, estou quebrando a cabeça há bastante tempo, mas meu objetivo é apenas selecionar 'Sudeste' e 'Norte' (no eixo x) para fazer a comparação entre o aproveitamento em Linguagens e códigos no enem (eixo y). Alguém pode por favor me ajudar?

Gráfico comparando o aproveitamento em LINGUAGEM E CÓDIGOS entre a região SUDESTE e NORTE

x = new_df.Média_em_Linguagem_e_códigos.mean()

y = new_df[(new_df["Região_Geográfica"] == "Norte")]

y2 = new_df[(new_df["Região_Geográfica"] == "Sudeste")]


fig, varx = plt.subplots()

varx.plot(x, y, label='Notas região Norte')
varx.plot(x, y2, label='Notas região Sudeste')
varx.set_title('Comparação das notas em LINGUAGEM E CÓDIGOS entre as regiões Norte e Sudeste')
varx.set_xlabel('Regiões')
varx.set_ylabel('Média em Linguagem e Códigos')
varx.set_legend()
varx.show()

Erro:


ValueError: x and y must have same first dimension, but have shapes (1,) and (0, 10)

Mesmo mudando a maneira de agrupar(Utilizando o groupby) os dados:

# Gráfico comparando o aproveitamento em LINGUAGEM E CÓDIGOS entre a região SUDESTE e NORTE

x = new_df.Média_em_Linguagem_e_códigos.mean()

# y = new_df[(new_df["Região_Geográfica"] == "Norte")]
y = new_df.groupby('Região_Geográfica')['Norte'] 

# y2 = new_df[(new_df["Região_Geográfica"] == "Sudeste")]
y2 = new_df.groupby('Região_Geográfica')['Sudeste']

fig, varx = plt.subplots()

varx.plot(x, y, label='Notas região Norte')
varx.plot(x, y2, label='Notas região Sudeste')
varx.set_title('Comparação das notas em LINGUAGEM E CÓDIGOS entre as regiões Norte e Sudeste')
varx.set_xlabel('Regiões')
varx.set_ylabel('Média em Linguagem e Códigos')
varx.set_legend()
varx.show()

O erro persiste:

KeyError: 'Column not found: Norte'
2 respostas

Olá, Elisa! Tudo bom? Espero que sim!

Antes de tudo, é interessante primeiro descrever qual a tarefa que você está tentando executar antes de trabalhar com a resolução de erros. E se possível, também adicionar alguma referência pros dados que está analisando.

Vamos lá!

Sobre o fragmento de comparar as notas de cada região,

x = new_df.Média_em_Linguagem_e_códigos.mean()
y = new_df[(new_df["Região_Geográfica"] == "Norte")]
y2 = new_df[(new_df["Região_Geográfica"] == "Sudeste")]

é interessante observar que o new_df já apresenta um valor único para cada região que é possível entender como a média, então não precisamos extrair média.

E sobre o gráfico de comparação, a função plt.plot() gera um gráfico de linha, e precisaríamos de pelo menos dois valores para uma mesma região para gerar o gráfico, então podemos optar por um gráfico de barras (plt.bar()).


import pandas as pd
import matplotlib.pyplot as plt 

df
Região_GeográficaMédia_em_Linguagem_e_códigos
0Norte474.194
1Nordeste487.383
2Sudeste522.654
3Sul515.723
4Centro-Oeste502.203

E para escolher as regiões, podemos fazer uma seleção sobre o DataFrame e armazenar em duas variáveis data1 e data2.

data1 = df[df['Região_Geográfica'] == 'Norte']
data1
Região_GeográficaMédia_em_Linguagem_e_códigos
0Norte474.194
data2 = df[df['Região_Geográfica'] == 'Sudeste']
data2
Região_GeográficaMédia_em_Linguagem_e_códigos
2Sudeste522.654

E a partir desse momento, podemos usar o matplotlib para imprimir o gráfico de barras com os títulos

fig, ax = plt.subplots()

ax.bar(data1.iloc[:, 0], data1.iloc[:, 1])
ax.bar(data2.iloc[:, 0], data2.iloc[:, 1])
ax.set_title('Comparação das notas em LINGUAGEM E CÓDIGOS entre as regiões Norte e Sudeste')
ax.set_xlabel('Regiões')
ax.set_ylabel('Média em Linguagem e Códigos')

plt.show()
Imagem colorida de um gráfico de barras com eixo X com nome de Regiões, e eixo Y com nome "Média em Linguagem e Códigos". No gráfico, temos duas barras com as cores azul e laranja. Na barra azul, a primeira, o rótulo é "Norte", e a altura está acima do valor 400 e um pouco antes do valor 500. Na segunda laranja, a segunda barra, o rótulo é Sudeste, e a altura está acima do valor 500 no eixo Y.

E pronto, temos o nosso gráfico feito utilizando o Matplotlib.


Uma outra alternativa é utilizar diretamente o Pandas plotting, que produziria o mesmo resultado diretamente do DataFrame.

df.plot(kind='bar', x='Região_Geográfica', y='Média_em_Linguagem_e_códigos')
plt.show()

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Não é necessário fechar o tópico, outras pessoas podem ser ajudadas por ele :D

Muito Obrigada!