2010-01-12 21 views
153

Ich habe ein Streudiagramm mit einer Reihe zufälliger x, y-Koordinaten. Derzeit beginnt die Y-Achse bei 0 und geht bis zum Maximalwert hoch. Ich würde die Y-Achse wie bei der Max-Wert beginnen und gehen bis zu 0.Umgekehrte Y-Achse in PyPlot

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) 

Antwort

332

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

plt.gca().invert_xaxis() 

und/oder

plt.gca().invert_yaxis() 
+4

Ich denke, das ist die aktuelle richtige Antwort. – heltonbiker

+0

Es ist definitiv. –

+13

Beachten Sie, dass Sie die Achsenlimits * vor dem * Invertieren der Achse einstellen müssen, andernfalls wird sie wieder invertiert. – TheBigH

9

Verwenden matplotlib.pyplot.axis()

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

So können Sie so etwas wie dies am Ende könnte hinzufügen:

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

Obwohl Sie möglicherweise Polsterung an jedem Ende wollen, so dass die extremen Punkte nicht auf der Grenze sitzen.

+0

Ich wünschte, ich könnte Sie beide korrekt markieren. Danke DisplacedAussie! – DarkAnt

26

DisplacedAussie ‚s Antwort ist richtig, aber in der Regel ein kürzeres Verfahren ist nur die einzelne Achse in Frage zu umkehren:

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

wo die gca() Funktion die aktuelle Achsen-Instanz zurückzugibt und die [::-1] kehrt die Liste.

+2

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

+4

'plt.ylim (plt.ylim() [:: - 1])' arbeitete für mich. –

9

Wenn Sie in ipython in pylab Modus sind, dann

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

die show() sind erforderlich, um es die aktuelle Figur zu machen zu aktualisieren.

3

Ein weiteres ähnliches Verfahren zu dem oben beschriebenen ist plt.ylim zum Beispiel zu verwenden:

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

Diese Methode funktioniert für mich, wenn ich mehrere Datensätze auf Y1 und/oder Y2

1

Alternativ zu der Verbindung bin versucht, können Sie die matplotlib.pyplot.axis() Funktion verwenden, die Sie jede der Handlung Achse

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

Invertierung ermöglicht Oder wenn Sie es vorziehen, onl y Umkehr der X-Achse, dann

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

der Tat können Sie beide Achse invertieren:

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

mit ylim() könnte der beste Ansatz für Ihren Zweck sein:

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

wird: enter image description here