2017-10-08 3 views
0

Der folgende Code ist die Annahme, die Gesamtzahl der Frauen zu erhalten, die in einem bestimmten Schuljahr wurde abgelehnt und gab zu:Python 3.0 Pandas und Matplotlib: bar() und anderer matplotlib Plots nicht String-Datenframe-Index als x-Achse

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

Der obige Code scheint in Ordnung zu funktionieren und gibt mir wie erwartet ein Balkendiagramm. Allerdings ist der folgende Code nicht:

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

All_Females_count Datenrahmen ist, wie nachfolgend beschrieben:

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 

Kann mir jemand sagen, warum? Ist die einzige Möglichkeit, Labels mit numerischen Daten zu verwenden?

Ich fand auch diese Diskussion Thema: https://github.com/matplotlib/matplotlib/issues/2516/ zum gleichen Thema.

Dies ist eine sehr ähnliche Frage. Mein Problem wurde jedoch nicht angesprochen: Using a Pandas dataframe index as values for x-axis in matplotlib plot

Antwort

0

matplotlib erwartet im Allgemeinen numerische Werte für seine X-Achse. Als the documentation for plt.bar() Zustände (emphasis mir):

x: Sequenz von Skalaren

die X-Koordinaten der Stäbe.

Eine recht einfache Art und Weise das Verhalten von pandas zu reproduzieren ist bar() mit einer Liste von 0 auf die Anzahl der Werte in Ihrem Index zu nennen, ersetzt dann die Zecken-Etikett mit dem tatsächlichen Inhalt des Index.

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

Vielen Dank! Es funktioniert wie ein Charme :) –

+0

Freut mich zu hören. Wenn Sie der Meinung sind, dass Ihre Frage geklärt ist, können Sie eine der Antworten mit der grünen Häkchenzeile akzeptieren, um den Thread zu schließen. –

+0

Ich hätte das unbedingt, außer dass ich Stackofflow sehr neu finde :( –

0

Um Beschriftungen von Balkendiagrammen zu erhalten, müssen Sie numerische Werte für das erste Argument angeben. Die Beschriftungen können mit dem Argument tick_labels festgelegt werden.

import matplotlib.pyplot as plt 

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

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

plt.show()