2013-11-26 15 views
20

To prawdopodobnie trywialne pytanie, ale próbuję wykreślić wykres słupkowy z matplotlib i obróconym tekstem na osi X. Kod używam jest pokazany poniżej:Irytująca biała przestrzeń na wykresie słupkowym (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") 

To działa doskonale, ale uzyskać irytujące spacje na prawo od osi x, jak pokazano czerwoną elipsą na poniższym zdjęciu:

enter image description here

Czy wiesz, jak mogę go usunąć? Z góry dziękuję!

+0

Czy możesz zamieścić działający przykład, który powiela figurę, którą wyświetlasz? –

Odpowiedz

26

Spróbuj zadzwonić pod numer plt.xlim() z liczbą pojemników, np.

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

Oto przykład:

#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() 

nr plt.xlim() wyjściowa:

no xlim

teraz wykreślić go z plt.xlim wykorzystując liczbę pojemników do określenia rozmiaru:

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

Wynika to:

with xlim

Nie może być lepszy sposób, ale to powinno działać dla ciebie.

+0

Dobrze, działa idealnie! – user2983638

+17

Można również użyć polecenia 'plt.axis ('tight')', aby osiągnąć to samo, bez obawy o podanie liczby pojemników. Ponadto, jeśli wolisz trochę miejsca na krawędziach, użyj 'plt.margins (0.05, 0)' aby obliczyć ograniczenia z 5% zakresu danych w kierunku x i 0% w kierunku y . –

+0

@Joe Kington: Tak, próbowałem również Twojego rozwiązania i działa! – user2983638

Powiązane problemy