Asse Y inverso in PyPlot


265

Ho un grafico a dispersione con un mucchio di coordinate casuali x, y. Attualmente l'asse Y inizia da 0 e arriva al valore massimo. Vorrei che l'asse Y partisse dal valore massimo e salisse fino a 0.

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)

Risposte:


557

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

plt.gca().invert_xaxis()

e / o

plt.gca().invert_yaxis()

49
Tenere presente che è necessario impostare i limiti degli assi prima di invertire l'asse, altrimenti lo invertirà nuovamente.
TheBigH

55

La risposta di DisplacedAussie è corretta, 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 gca()funzione restituisce l'istanza corrente degli assi e [::-1]inverte l'elenco.


3
Mi sembra una risposta migliore. :)
Dislocato

18

Usa matplotlib.pyplot.axis ()

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

Quindi potresti aggiungere qualcosa di simile alla fine:

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

Anche se potresti voler imbottire ad ogni estremità in modo che i punti estremi non siedano sul bordo.


Questo ha un vantaggio rispetto alle prime due risposte che corregge l'orientamento, non capovolgerlo ogni volta (che è un problema se è necessario chiamarlo in un ciclo).
Bas Swinckels,

16

Se sei in ipython in pylabmodalità, allora

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

la show()è necessario per rendere aggiornare la figura corrente.


9

È inoltre possibile utilizzare la funzione esposta dall'oggetto degli assi del grafico a dispersione

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

8

Un altro metodo simile a quelli sopra descritti è utilizzare plt.ylimad esempio:

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

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


3

l'utilizzo di ylim () potrebbe essere l'approccio migliore per il tuo scopo:

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

risulterà:inserisci qui la descrizione dell'immagine


2

In alternativa, è possibile utilizzare la funzione matplotlib.pyplot.axis () , che consente di invertire uno qualsiasi degli assi del grafico

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

O se preferisci invertire solo l'asse X, allora

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

Infatti, puoi invertire entrambi gli assi:

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

0

Se usi matplotlib puoi provare: matplotlib.pyplot.xlim(l, r) matplotlib.pyplot.ylim(b, t)

Queste due linee definiscono rispettivamente i limiti degli assi xey. Per l'asse x, il primo argomento l imposta il valore più a sinistra e il secondo argomento r imposta il valore più a destra. Per l'asse y, il primo argomento b imposta il valore più in basso e il secondo argomento t imposta il valore più in alto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.