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.