2010-01-12 55 views
153

Ho un grafico di diagramma a dispersione con un mucchio di coordinate x, y casuali. Attualmente l'asse Y inizia da 0 e sale al valore massimo. Vorrei che l'asse Y per iniziare al valore massimo e andare fino a 0.Asse Y invertito 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) 

risposta

332

C'è una nuova API che lo rende ancora più semplice.

plt.gca().invert_xaxis() 

e/o

plt.gca().invert_yaxis() 
+4

Penso che questa sia l'attuale risposta giusta. – heltonbiker

+0

Lo è sicuramente. –

+13

Tenere presente che è necessario impostare i limiti dell'asse * prima * di invertire l'asse, altrimenti lo si annullerà nuovamente. – TheBigH

9

Usa matplotlib.pyplot.axis()

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

Così si potrebbe aggiungere qualcosa di simile alla fine:

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

Anche se è possibile eseguire il riempimento su ciascuna estremità in modo che i punti estremi non si trovino sul bordo. risposta

+0

Vorrei poter contrassegnare entrambi corretto. Grazie DisplacedAussie! – DarkAnt

26

DisplacedAussie 's è corretto, ma di solito un metodo più breve è solo quello di invertire il singolo asse in questione:

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

dove la funzione gca() restituisce l'istanza Assi corrente e il [::-1] inverte la lista.

+2

Sembra una risposta migliore per me. :) – DisplacedAussie

+4

'plt.ylim (plt.ylim() [:: - 1])' ha funzionato per me. –

9

Se siete in ipython in modalità pylab, quindi

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

il show() è necessario per rendere aggiornare la cifra attuale.

3

Un altro metodo simile a quelli sopra descritti è quello di utilizzare plt.ylim ad esempio:

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

Questo metodo funziona per me quando sto tentando di composti più set di dati su Y1 e/o Y2

1

alternativa , è possibile utilizzare la funzione di matplotlib.pyplot.axis(), che consente di invertire qualsiasi della trama dell'asse

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

O se si preferisce onl y invertire l'asse X, quindi

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

Infatti, è possibile invertire entrambi gli assi:

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

utilizzando ylim() potrebbe essere l'approccio migliore per il vostro scopo:

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

risulterà: enter image description here