2013-11-26 11 views
20

Es ist wahrscheinlich eine triviale Frage, aber ich versuche, ein Balkendiagramm mit Matplotlib und mit gedrehten Text auf der X-Achse zu plotten.Ärgerlicher Leerraum in Balkendiagramm (Matplotlib, Python)

fig = plt.figure() 

x_labels_list = [] 

for i in range(0, pow(2, N)): 
    x_labels_list.append(str(f(i))) # The function f() converts i to a binary string 

ax = plt.subplot(111) 
width = 1.0 
bins = map(lambda x: x-width, range(1,pow(2,N)+1)) 
ax.bar(bins, my_data, width=width) 
ax.set_xticks(map(lambda x: x-width/2, range(1,pow(2,N)+1))) 
ax.set_xticklabels(x_labels_list, rotation=90, rotation_mode="anchor", ha="right") 

Es funktioniert perfekt, aber ich erhalte einen lästigen weißen Raum auf dem rechten Seite der x-Achse, wie durch die rote Ellipse in der folgenden Abbildung dargestellt: Der Code, den ich verwende, wird weiter unten

enter image description here

Wissen Sie, wie ich es entfernen kann? Danke im Voraus!

+0

Können Sie ein Arbeitsbeispiel veröffentlichen, das die angezeigte Figur repliziert? –

Antwort

26

Versuchen Sie, plt.xlim() mit der Anzahl der Behälter, z. Hier

plt.xlim([0,bins.size]) 

ist ein Beispiel:

#make some data 
N = 22 
data = np.random.randint(1,10,N) 
bin = np.arange(N) 
width = 1 

#plot it 
ax = plt.subplot(111) 
ax.bar(bin, data, width, color='r') 
plt.show() 

Nein plt.xlim() Ausgang:

no xlim

Jetzt zeichnen sie mit plt.xlim mit der Anzahl der Behälter, die Größe zu definieren:

#plot it 
ax = plt.subplot(111) 
ax.bar(bin, data, width, color='r') 
plt.xlim([0,bin.size]) 
plt.show() 

Ergebnisse es:

with xlim

Es kann eine bessere Art und Weise sein, aber dies sollte für Sie arbeiten.

+0

Schön, es funktioniert perfekt! – user2983638

+17

Sie können auch 'plt.axis ('tight')' verwenden, um dasselbe zu erreichen, ohne sich um die Anzahl der Bins kümmern zu müssen. Wenn Sie an den Kanten etwas Platz bevorzugen, verwenden Sie "plt.margins (0.05, 0)", um die Grenzen mit 5% des Datenbereichs in x-Richtung und 0% in y-Richtung aufzufüllen . –

+0

@Joe Kington: Ja, ich habe auch deine Lösung ausprobiert, und es funktioniert! – user2983638

Verwandte Themen