ustawienie limitu osi Y w matplotlib

416

Potrzebuję pomocy w ustawianiu granic osi Y na matplotlib. Oto kod, który próbowałem bezskutecznie.

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

Z danymi, które mam dla tego wykresu, otrzymuję granice osi Y wynoszące 20 i 200. Jednak chcę granice 20 i 250.

Curious2learn
źródło
1
Działa dla mnie z Matplotlib 1.0.0, jeśli dodam plt.show()na końcu, aby pokazać fabułę. Jakiej wersji i którego zaplecza używasz?
Tamás
14
Pracuje dla mnie z Matplotlib 0.98.5.2, Python 2.6.2. Próbowałem obu plt.ylim((25,250))i plt.ylim(ymax = 250, ymin = 25). Korzystam z Aggbackendu.
Manoj Govindan,
1
Dziękuję wam obu. Czy to działa z backendem PDF dla Ciebie.
Curious2learn
1
Uwaga: axisbgobecnie jest przestarzałe
SherylHohman

Odpowiedzi:

616

Spróbuj tego . Działa również w przypadku wątków podrzędnych.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Hima
źródło
201
Przy okazji, to głupie oznacza skrót „ g ET C urrent XES”.
Lenar Hoyt,
32
możesz także ustawić jedną wartość, Nonektóra pozostawia obliczenia na matplotlib, np.axes.set_ylim([ymin,None])
linqu
129

Twój kod działa również dla mnie. Jednak innym obejściem może być uzyskanie osi wykresu, a następnie zmiana tylko wartości y:

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))

thetarro
źródło
1
Możesz po prostu ustawić x1 i x2 Brak.
Hielke Walinga
78

Jedną rzeczą, którą możesz zrobić, to samodzielnie ustawić zakres osi za pomocą matplotlib.pyplot.axis.

matplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0,10 jest dla zakresu osi x. 0,20 jest dla zakresu osi y.

lub możesz również użyć matplotlib.pyplot.xlim lub matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)
Birat Bose
źródło
24

Możesz utworzyć obiekt z obiektu matplotlib.pyplot.axesi wywołać set_ylim()go. Byłoby to coś takiego:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])
Reza Keshavarz
źródło
16

Działa to przynajmniej w wersji matplotlib 2.2.2:

plt.axis([None, None, 0, 100])

Prawdopodobnie jest to dobry sposób na skonfigurowanie np. Tylko xmin i ymax itp.

Antti A
źródło
14

Aby dodać do odpowiedzi @ Hima, jeśli chcesz zmodyfikować bieżący limit x lub y, możesz użyć następujących.

import numpy as np # you probably alredy do this so no extra overhead
fig, axes = plt.subplot()
axes.plot(data[:,0], data[:,1])
xlim = axes.get_xlim()
# example of how to zoomout by a factor of 0.1
factor = 0.1 
new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
axes.set_xlim(new_xlim)

Uważam, że jest to szczególnie przydatne, gdy chcę pomniejszyć lub powiększyć trochę z domyślnych ustawień wydruku.

Steven C. Howell
źródło
7

To powinno działać. Twój kod działa dla mnie, jak dla Tamás i Manoj Govindan. Wygląda na to, że możesz spróbować zaktualizować Matplotlib. Jeśli nie możesz zaktualizować Matplotlib (na przykład, jeśli masz niewystarczające uprawnienia administracyjne), być matplotlib.use()może pomocne może być użycie innego backendu .

Eric O Lebigot
źródło
Dzięki za sprawdzenie! Korzystam z backendu pdf ( matplotlib.use('PDF')). Korzystam z wersji dostarczanej z najnowszą wersją Enthought Python Distribution. Czy możesz zobaczyć, czy działa z backendem PDF. Dzięki!
Curious2learn
Działa z backendem PDF w Mac OS X. Czy jesteś pewien, że plik wyjściowy jest rzeczywiście aktualizowany plt.savefig()?
Eric O Lebigot,
Myślę, że zdałem sobie sprawę z problemu. Jeśli wezmę się aPlot =w plt.subplotwierszu, że pracuje dla mnie. Wygląda na to, że jeśli przypisze się podplot do takiej zmiennej, należy zastosować inną metodę ustalania granic osi. Czy to prawda?
Curious2learn
1
O ile wiem, plt.ylim()stosuje ograniczenia do bieżących osi, które są ustawiane, kiedy to robisz plt.subplot(). Nie mogę również uwierzyć, że plt.subplot()zależy na tym, w jaki sposób wykorzystywane są zwracane osie (wstawiane do zmiennej lub nie, itp.). Więc powiedziałbym, że powinno działać; działa na moim komputerze.
Eric O Lebigot,
6

Tylko do precyzyjnego dostrojenia. Jeśli chcesz ustawić tylko jedną z granic osi i pozostawić drugą granicę bez zmian, możesz wybrać jedną lub więcej następujących instrukcji

plt.xlim(right=xmax) #xmax is your value
plt.xlim(left=xmin) #xmin is your value
plt.ylim(top=ymax) #ymax is your value
plt.ylim(bottom=ymin) #ymin is your value

Spójrz na dokumentacji dla xlim i ylim

Lov.by.Jezus
źródło
0

Jeśli osie (generowane przez kod pod kodem pokazanym w pytaniu) dzielą zakres z pierwszymi osiami, upewnij się, że ustawiłeś zakres po ostatnim wykresie tych osi.

Rainald62
źródło