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

Antworten:

556

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

plt.gca().invert_xaxis()

und / oder

plt.gca().invert_yaxis()
Demitri
quelle
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.

Tim Whitcomb
quelle
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.

DisplacedAussie
quelle
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.

charles.fox
quelle
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()
ShikharDua
quelle
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

Mortsde
quelle
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

Farzad Schwindel
quelle
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]))
Luis DG
quelle
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.

Andy Turner
quelle