2017-10-08 3 views
0

Le code suivant est d'obtenir le nombre total de femmes qui se sont rejetées et admis en une année scolaire particulière:Python 3.0 Pandas et Matplotlib: bar() et d'autres index de chaîne parcelles matplotlib pas accepter de dataframe comme axe x

query1=All_Females_count[['Admit','Freq']].groupby('Admit').sum() 
print(query1) 
query1.set_index(data.Admit.unique()) 
query1.plot(kind='bar') 

Le code ci-dessus semble fonctionner correctement et me donner un graphique à barres comme prévu. Cependant, le code ci-dessous ne pas:

plt.bar(query1.index,query1.Freq) 
plt.show() 

All_Females_count dataframe est donné ci-dessous:

Admit Gender Dept Freq 
2 Admitted Female A 89 
3 Rejected Female A 19 
6 Admitted Female B 17 
7 Rejected Female B 8 
10 Admitted Female C 202 
11 Rejected Female C 391 
14 Admitted Female D 131 
15 Rejected Female D 244 
18 Admitted Female E 94 
19 Rejected Female E 299 
22 Admitted Female F 24 
23 Rejected Female F 317 

Quelqu'un peut-il me dire pourquoi? Est-ce que le seul moyen de contourner cela est d'utiliser des étiquettes avec des données numériques?

J'ai également trouvé ce fil de discussion: https://github.com/matplotlib/matplotlib/issues/2516/ sur le même sujet.

C'est une question très similaire. Cependant, il n'a pas résolu mon problème: Using a Pandas dataframe index as values for x-axis in matplotlib plot

Répondre

0

matplotlib attend généralement des valeurs numériques pour son axe x. Comme the documentation for plt.bar() états (mine d'accentuation):

x: séquence de scalaires

les coordonnées x des barres.

Une façon assez simple à reproduire le comportement de pandas est d'appeler bar() une liste de 0 au nombre de valeurs dans l'index, puis remplacez les étiquettes des tiques avec le contenu réel de l'indice.

plt.bar(range(len(query1.index)),query1.Freq) 
plt.xticks(range(len(query1.index)), query1.index) 
plt.show() 
+0

Merci beaucoup! Cela fonctionne comme un charme :) –

+0

Content d'entendre. Si vous pensez que votre question a été résolue, pensez à accepter l'une des réponses en utilisant la ligne de graduation verte pour fermer ce fil –

+0

Je l'aurais absolument, sauf que je suis très nouveau sur Stackoverflow :( –

0

Pour obtenir des étiquettes sur les graphiques à barres, vous devez fournir des valeurs numériques au premier argument. Les étiquettes peuvent être définies à l'aide de l'argument tick_labels.

import matplotlib.pyplot as plt 

x = list("ABC") 
y = [1,3,4] 

plt.bar(range(len(y)), y, tick_label=x) 

plt.show()