2016-12-17 3 views
1

Ich brauche Text auf der X-Achse in Matplotlib Grafik. Ich habe:Hinzufügen von Text in Balkendiagramm in Matplotlib (Python)

import matplotlib.pyplot as plt 
x=[1,2,3,4,5,6,7,8,9,10,11,12] 
y=[5.3, 6.1, 25.5, 27.8, 31.2, 33.0, 33.0, 32.8, 28.4, 21.1, 17.5, 11.9] 

plt.bar(x,y, color='g') 

plt.xlabel('x') 
plt.ylabel('y') 
plt.title("Max Temperature for Months") 
plt.legend() 
plt.show() 

Und meine Ausgabe lautet:

My graph

Ich weiß nicht, wie x=[ ] Liste mit Text (Strings) zu ersetzen, es gibt mir Fehler.

Meine gewünschte Diagramm ist:

My desied graph

+0

Können Sie meine Antwort akzeptieren, wenn es hilfreich war? Danke – Chuck

Antwort

3

Verwenden Sie die plt.xticks() Funktion wie folgt:

import matplotlib.pyplot as plt 
x=[1,2,3,4,5] 
y=[1,2,3,4,5] 

plt.bar(x,y, color='g') 

plt.xlabel('x') 
plt.ylabel('y') 

einige Etiketten generieren auf dem Diagramm zu gehen. Die Liste der Strings müssen die gleiche Länge wie Ihre x und y Listen sein:

LABELS = ["M","w","E","R","T"] 

Plot sie mit den folgenden:

plt.xticks(x, LABELS) 

plt.title("Max Temperature for Months") 
plt.legend() 
plt.show() 

Beispiel Siehe hier: http://matplotlib.org/examples/ticks_and_spines/ticklabels_demo_rotation.html

Edit: Für Informationen über Anpassen der Position/Ausrichtung/Position Ihrer Etiketten finden Sie in der Dokumentation zu Matplotlib API und dieser Frage: matplotlib ticks position relative to axis.

Edit: Hinzugefügt Image: http://imgur.com/igjUGLb

Edit: die Lage zu erreichen und Orientierung, die Sie benötigen, finden Sie ein gutes Beispiel in dieser Frage: Matplotlib Python Barplot: Position of xtick labels have irregular spaces between eachother.

Implementierung:

b = plt.bar(x,y, color='g') 
xticks_pos = [0.5*patch.get_width() + patch.get_xy()[0] for patch in b]   
plt.xticks(xticks_pos, LABELS,rotation = 45) 

gibt: https://imgur.com/a/78Esz Hoffnung, das hilft.

+1

Statt 'xticks_pos' könnte man' plt.bar (..., align = 'center') 'verwenden. – unutbu

+1

Um 'LABELS' zu definieren, können Sie' import datetime', 'LABELS = [DT.datetime.strftime (DT.date (2001, xi, 1), '% B') für xi in x]' verwenden. – unutbu

+0

@unutbu Großer Rat. Ganz vergessen, ausrichten. Viel sauberer. – Chuck

Verwandte Themen