435 Stimmen

Wie man die x- oder y-Achse umkehrt

Ich habe einen Streudiagrammgraphen mit einer Reihe von zufälligen x, y-Koordinaten. Derzeit beginnt die Y-Achse bei 0 und geht bis zum maximalen Wert. Ich möchte, dass die Y-Achse beim maximalen Wert beginnt und bis 0 geht.

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)

1 Stimmen

Die Anzahl der richtigen Antworten auf diese Fragen zeigt nur, wie verwirrend diese Bibliothek in der Anwendung ist.

0 Stimmen

@g_uint Seit mindestens 10 Jahren gibt es ein offensichtlicher Weg und das ist das Aufrufen der invert_yaxis() Methode.

2 Stimmen

@BlackJack, was für dich offensichtlich ist, könnte für jemand anderen nicht offensichtlich sein :)

829voto

Demitri Punkte 11386

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

plt.gca().invert_xaxis()

und/oder

plt.gca().invert_yaxis()

81 Stimmen

Achte darauf, dass du die Achsenbegrenzungen vor dem Umkehren der Achse setzen musst, da sie sonst wieder entgegengesetzt wird.

2 Stimmen

Es wäre sicher schön, wenn es ein boolesches Argument annehmen könnte. Wenn es wiederholt aufgerufen wird, wird es nur hin und her geschaltet.

0 Stimmen

Die Antwort von @Tim Whitcomb unten funktioniert für spezifische Achsenobjekte. Gibt es eine Möglichkeit, invert_yaxis() auf eine bestimmte Achse anzuwenden? (Die Unterscheidung kann wichtig sein, wenn Unterplots verwendet werden.)

92voto

Tim Whitcomb Punkte 9987

Die Antwort von DisplacedAussie ist korrekt, aber in der Regel genügt es, einfach die einzelne Achse umzukehren:

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

wobei die Funktion gca() die aktuelle Axes-Instanz zurückgibt und [::-1] die Liste umkehrt.

62voto

ShikharDua Punkte 8431

Sie könnten auch die Funktion verwenden, die vom Achsenobjekt des Punktdiagramms freigelegt wird

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

0 Stimmen

Ich habe mich gefragt, warum mein 3D-Drahtgitter mir nicht dasselbe Datum wie die Karte gab. Invertiere die x-Achse.

24voto

DisplacedAussie Punkte 4428

Verwenden Sie matplotlib.pyplot.axis()

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

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

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

Obwohl Sie vielleicht Abstände an jedem Ende möchten, damit die Extrempunkte nicht am Rand liegen.

0 Stimmen

Dies hat den Vorteil gegenüber den ersten beiden Antworten, dass es die Ausrichtung fixiert und nicht jedes Mal umdreht (was ein Problem darstellt, wenn Sie es in einer Schleife aufrufen müssen).

24voto

charles.fox Punkte 463

Wenn Sie im ipython im pylab Modus sind, dann

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

ist das show() erforderlich, um das aktuelle Diagramm zu aktualisieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X