Einstellen der y-Achsengrenze in matplotlib


416

Ich brauche Hilfe beim Festlegen der Grenzen der y-Achse auf matplotlib. Hier ist der Code, den ich erfolglos ausprobiert habe.

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

Mit den Daten, die ich für dieses Diagramm habe, erhalte ich Grenzwerte für die y-Achse von 20 und 200. Ich möchte jedoch die Grenzwerte für 20 und 250.


1
Funktioniert für mich mit Matplotlib 1.0.0, wenn ich plt.show()am Ende hinzufüge , um den Plot anzuzeigen. Welche Version und welches Backend verwenden Sie?
Tamás

14
Arbeiten für mich mit Matplotlib 0.98.5.2, Python 2.6.2. Ich habe beides versucht plt.ylim((25,250))und plt.ylim(ymax = 250, ymin = 25). Ich benutze das AggBackend.
Manoj Govindan

1
Danke euch beiden. Funktioniert es mit PDF-Backend für Sie?
Curious2learn

1
Hinweis: axisbgist jetzt veraltet
SherylHohman

Antworten:


614

Versuche dies . Funktioniert auch für Nebenhandlungen.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

201
BTW, ist dies eine dumme Abkürzung bedeutet " g et die c urrent a xes".
Lenar Hoyt

32
Sie können auch einen Wert Nonefestlegen, der die Berechnung matplotlib überlässt, z. B.axes.set_ylim([ymin,None])
linqu

129

Ihr Code funktioniert auch für mich. Eine andere Problemumgehung kann jedoch darin bestehen, die Achse des Diagramms abzurufen und dann nur die y-Werte zu ändern:

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


1
Sie können einfach x1 und x2 None einstellen.
Hielke Walinga

77

Sie können Ihren Achsenbereich mithilfe von matplotlib.pyplot.axis selbst festlegen.

matplotlib.pyplot.axis

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

0,10 steht für den x-Achsenbereich. 0,20 ist für den y-Achsenbereich.

oder Sie können auch matplotlib.pyplot.xlim oder matplotlib.pyplot.ylim verwenden

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)

24

Sie können ein Objekt von instanziieren matplotlib.pyplot.axesund das darauf aufrufen set_ylim(). Es wäre ungefähr so:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])

16

Dies funktionierte zumindest in matplotlib Version 2.2.2:

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

Wahrscheinlich ist dies eine gute Möglichkeit, zum Beispiel nur xmin und ymax usw. einzurichten.


14

Um die Antwort von @ Hima zu ergänzen, können Sie Folgendes verwenden, wenn Sie eine aktuelle x- oder y-Grenze ändern möchten.

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)

Ich finde dies besonders nützlich, wenn ich die Standard-Plot-Einstellungen verkleinern oder nur ein wenig vergrößern möchte.


7

Das sollte funktionieren. Ihr Code funktioniert für mich wie für Tamás und Manoj Govindan. Es sieht so aus, als könnten Sie versuchen, Matplotlib zu aktualisieren. Wenn Sie Matplotlib nicht aktualisieren können (z. B. wenn Sie nicht über ausreichende Administratorrechte verfügen), kann die Verwendung eines anderen Backends mit matplotlib.use()hilfreich sein.


Danke für das Kontrollieren! Ich benutze das PDF-Backend ( matplotlib.use('PDF')). Ich verwende die Version, die mit der neuesten Version der Enthought Python Distribution geliefert wird. Können Sie bitte sehen, ob es mit dem PDF-Backend funktioniert? Vielen Dank!
Curious2learn

Es funktioniert mit dem PDF-Backend unter Mac OS X. Sind Sie sicher, dass die Ausgabedatei tatsächlich mit aktualisiert wird plt.savefig()?
Eric O Lebigot

Ich habe das Problem erkannt, denke ich. Wenn ich aPlot =in der plt.subplotLeitung herausnehme, funktioniert es auch für mich. Es scheint, dass, wenn man die Unterzeichnung einer solchen Variablen zuweist, eine andere Methode zum Festlegen der Achsengrenzen verwendet werden muss. Ist das wahr?
Curious2learn

1
Soweit ich weiß, werden plt.ylim()die Grenzwerte auf die aktuellen Achsen angewendet, die festgelegt werden, wenn Sie dies tun plt.subplot(). Ich kann auch nicht glauben, dass es plt.subplot()wichtig ist, wie die zurückgegebenen Achsen verwendet werden (in eine Variable eingefügt oder nicht usw.). Also würde ich sagen, es sollte funktionieren; es funktioniert auf meiner Maschine.
Eric O Lebigot

6

Nur zur Feinabstimmung. Wenn Sie nur eine der Grenzen der Achse festlegen und die andere Grenze unverändert lassen möchten, können Sie eine oder mehrere der folgenden Anweisungen auswählen

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

Schauen Sie sich die Dokumentation für xlim und für ylim an


0

Wenn eine Achse (generiert durch Code unterhalb des in der Frage gezeigten Codes) den Bereich mit den ersten Achsen teilt , stellen Sie sicher, dass Sie den Bereich nach dem letzten Plot dieser Achsen festlegen .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.