impostazione del limite dell'asse y in matplotlib


416

Ho bisogno di aiuto per impostare i limiti dell'asse y su matplotlib. Ecco il codice che ho provato, senza successo.

import matplotlib.pyplot as plt

plt.figure(1, figsize = (8.5,11))
plt.suptitle('plot title')
ax = []
aPlot = plt.subplot(321, axisbg = 'w', title = "Year 1")
ax.append(aPlot)
plt.plot(paramValues,plotDataPrice[0], color = '#340B8C', 
     marker = 'o', ms = 5, mfc = '#EB1717')
plt.xticks(paramValues)
plt.ylabel('Average Price')
plt.xlabel('Mark-up')
plt.grid(True)
plt.ylim((25,250))

Con i dati che ho per questo diagramma, ottengo i limiti dell'asse y di 20 e 200. Tuttavia, voglio i limiti 20 e 250.


1
Funziona per me con Matplotlib 1.0.0 se aggiungo plt.show()alla fine per mostrare la trama. Quale versione e quale backend stai usando?
Tamás,

14
Lavorando per me con Matplotlib 0.98.5.2, Python 2.6.2. Ho provato entrambi plt.ylim((25,250))e plt.ylim(ymax = 250, ymin = 25). Sto usando il Aggbackend.
Manoj Govindan,

1
Grazie a tutti e due. Funziona con il backend PDF per te.
Curious2learn,

1
nota: axisbgora è deprecato
SherylHohman,

Risposte:


616

Prova questo . Funziona anche per le sottotrame.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])

201
A proposito, questo è un mezzo stupido abbreviazione " g et al c orrente un xes".
Lenar Hoyt

33
puoi anche impostare un valore Noneche lascia il calcolo su matplotlib, ad esempioaxes.set_ylim([ymin,None])
linqu

129

Il tuo codice funziona anche per me. Tuttavia, un'altra soluzione alternativa può essere quella di ottenere l'asse del grafico e quindi modificare solo i valori y:

x1,x2,y1,y2 = plt.axis()
plt.axis((x1,x2,25,250))


1
Puoi semplicemente impostare x1 e x2 Nessuno.
Hielke Walinga,

78

Una cosa che puoi fare è impostare l'intervallo di assi da solo utilizzando matplotlib.pyplot.axis.

matplotlib.pyplot.axis

from matplotlib import pyplot as plt
plt.axis([0, 10, 0, 20])

0,10 è per l'intervallo dell'asse x. 0,20 è per l'intervallo dell'asse y.

oppure puoi anche usare matplotlib.pyplot.xlim o matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)

24

È possibile creare un'istanza di un oggetto matplotlib.pyplot.axese chiamarlo set_ylim()su di esso. Sarebbe qualcosa del genere:

import matplotlib.pyplot as plt
axes = plt.axes()
axes.set_ylim([0, 1])

16

Funzionava almeno nella versione 2.2.2 di matplotlib:

plt.axis([None, None, 0, 100])

Probabilmente questo è un bel modo per configurare solo xmin e ymax, ecc.


14

Per aggiungere alla risposta di @Hima, se si desidera modificare un limite x o y corrente, è possibile utilizzare quanto segue.

import numpy as np # you probably alredy do this so no extra overhead
fig, axes = plt.subplot()
axes.plot(data[:,0], data[:,1])
xlim = axes.get_xlim()
# example of how to zoomout by a factor of 0.1
factor = 0.1 
new_xlim = (xlim[0] + xlim[1])/2 + np.array((-0.5, 0.5)) * (xlim[1] - xlim[0]) * (1 + factor) 
axes.set_xlim(new_xlim)

Lo trovo particolarmente utile quando voglio rimpicciolire o ingrandire solo un po 'le impostazioni di trama predefinite.


7

Questo dovrebbe funzionare. Il tuo codice funziona per me, come per Tamás e Manoj Govindan. Sembra che potresti provare ad aggiornare Matplotlib. Se non riesci ad aggiornare Matplotlib (ad esempio se hai diritti amministrativi insufficienti), matplotlib.use()potrebbe essere utile utilizzare un backend diverso con .


Grazie per il controllo! Sto usando il pdf backend ( matplotlib.use('PDF')). Sto usando la versione fornita con l'ultima versione di Enthought Python Distribution. Puoi vedere se funziona con il backend PDF. Grazie!
Curious2learn,

Funziona con il backend PDF, su Mac OS X. Sei sicuro che il file di output sia effettivamente aggiornato plt.savefig()?
Eric O Lebigot,

Ho capito il problema, penso. Se tiro fuori aPlot =la plt.subplotfila, funziona anche per me. Sembra che se si assegna la sottotrama a una variabile del genere, è necessario utilizzare qualche altro metodo per impostare i limiti degli assi. È vero?
Curious2learn,

1
Per quanto ne so, plt.ylim()applica i limiti agli assi correnti, che vengono impostati quando lo fai plt.subplot(). Inoltre, non riesco a credere che ci si plt.subplot()preoccupi di come vengono usati gli assi che restituisce (inseriti in una variabile o no, ecc.). Quindi direi che dovrebbe funzionare; funziona sulla mia macchina.
Eric O Lebigot,

6

Solo per la messa a punto. Se si desidera impostare solo uno dei limiti dell'asse e lasciare invariato l'altro confine, è possibile scegliere una o più delle seguenti affermazioni

plt.xlim(right=xmax) #xmax is your value
plt.xlim(left=xmin) #xmin is your value
plt.ylim(top=ymax) #ymax is your value
plt.ylim(bottom=ymin) #ymin is your value

Dai un'occhiata alla documentazione per xlim e per ylim


0

Se un asse (generato dal codice sotto il codice mostrato nella domanda) condivide l'intervallo con i primi assi, assicurarsi di impostare l'intervallo dopo l'ultimo grafico di quegli assi.

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.