Umgekehrte Y-Achse in PyPlot


265

Ich habe ein Streudiagramm mit einer Reihe von zufälligen x, y-Koordinaten. Derzeit beginnt die Y-Achse bei 0 und steigt bis zum Maximalwert an. Ich möchte, dass die Y-Achse beim Maximalwert beginnt und auf 0 steigt.

points = [(10,5), (5,11), (24,13), (7,8)]    
x_arr = []
y_arr = []
for x,y in points:
    x_arr.append(x)
    y_arr.append(y)
plt.scatter(x_arr,y_arr)

Antworten:


556

Es gibt eine neue API, die dies noch einfacher macht.

plt.gca().invert_xaxis()

und / oder

plt.gca().invert_yaxis()

49
Beachten Sie, dass Sie die Achsengrenzen festlegen müssen, bevor Sie die Achse invertieren. Andernfalls wird die Invertierung wieder aufgehoben.
TheBigH

55

Die Antwort von DisplacedAussie ist richtig, aber normalerweise besteht eine kürzere Methode darin, die betreffende einzelne Achse umzukehren:

plt.scatter(x_arr, y_arr)
ax = plt.gca()
ax.set_ylim(ax.get_ylim()[::-1])

Dabei gibt die gca()Funktion die aktuelle Axes-Instanz zurück und [::-1]kehrt die Liste um.


3
Das scheint mir eine bessere Antwort zu sein. :)
DisplacedAussie

18

Verwenden Sie matplotlib.pyplot.axis ()

axis([xmin, xmax, ymin, ymax])

Sie könnten also am Ende so etwas hinzufügen:

plt.axis([min(x_arr), max(x_arr), max(y_arr), 0])

Obwohl Sie möglicherweise an jedem Ende eine Polsterung wünschen, damit die Extrempunkte nicht am Rand sitzen.


Dies hat gegenüber den ersten beiden Antworten den Vorteil, dass die Ausrichtung korrigiert und nicht jedes Mal umgedreht wird (was ein Problem ist, wenn Sie es in einer Schleife aufrufen müssen).
Bas Swinckels

16

Wenn Sie sich im pylabModus in ipython befinden , dann

plt.gca().invert_yaxis()
show()

Dies show()ist erforderlich, damit die aktuelle Abbildung aktualisiert wird.


9

Sie können auch eine Funktion verwenden, die durch das Achsenobjekt des Streudiagramms verfügbar gemacht wird

scatter = plt.scatter(x, y)
ax = scatter.axes
ax.invert_xaxis()
ax.invert_yaxis()

8

Eine andere ähnliche Methode wie oben beschrieben ist zum plt.ylimBeispiel:

plt.ylim(max(y_array), min(y_array))

Diese Methode funktioniert bei mir, wenn ich versuche, mehrere Datensätze auf Y1 und / oder Y2 zusammenzusetzen


3

Die Verwendung von ylim () ist möglicherweise der beste Ansatz für Ihren Zweck:

xValues = list(range(10))
quads = [x** 2 for x in xValues]
plt.ylim(max(quads), 0)
plt.plot(xValues, quads)

wird ergeben:Geben Sie hier die Bildbeschreibung ein


2

Alternativ können Sie die Funktion matplotlib.pyplot.axis () verwenden, mit der Sie eine beliebige Plotachse invertieren können

ax = matplotlib.pyplot.axis()
matplotlib.pyplot.axis((ax[0],ax[1],ax[3],ax[2]))

Oder wenn Sie es vorziehen, nur die X-Achse umzukehren, dann

matplotlib.pyplot.axis((ax[1],ax[0],ax[2],ax[3]))

In der Tat können Sie beide Achsen umkehren:

matplotlib.pyplot.axis((ax[1],ax[0],ax[3],ax[2]))

0

Wenn Sie matplotlib verwenden, können Sie Folgendes versuchen: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Diese beiden Linien legen die Grenzen der x- bzw. y-Achse fest. Für die x-Achse setzt das erste Argument l den Wert ganz links und das zweite Argument r den Wert ganz rechts. Für die y-Achse legt das erste Argument b den untersten Wert und das zweite Argument t den obersten Wert fest.

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.