establecer el límite del eje y en matplotlib

416

Necesito ayuda para establecer los límites del eje y en matplotlib. Aquí está el código que probé, sin éxito.

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 los datos que tengo para este gráfico, obtengo límites del eje y de 20 y 200. Sin embargo, quiero los límites 20 y 250.

Curious2learn
fuente
1
Funciona para mí con Matplotlib 1.0.0 si agrego plt.show()al final para mostrar la trama. ¿Qué versión y qué backend estás usando?
Tamás
14
Trabajando para mí con Matplotlib 0.98.5.2, Python 2.6.2. Probé ambos plt.ylim((25,250))y plt.ylim(ymax = 250, ymin = 25). Estoy usando el Aggbackend.
Manoj Govindan
1
Gracias a los dos. ¿Funciona con el backend de PDF para usted?
Curious2learn
1
nota: axisbgahora está en desuso
SherylHohman

Respuestas:

616

Prueba esto . Funciona para subtramas también.

axes = plt.gca()
axes.set_xlim([xmin,xmax])
axes.set_ylim([ymin,ymax])
Hima
fuente
201
Por cierto, esta es una abreviatura tonta significa " g et the c urrent a xes ".
Lenar Hoyt
33
también puede establecer un valor Noneque deje el cálculo en matplotlib, por ejemploaxes.set_ylim([ymin,None])
linqu
129

Tu código también funciona para mí. Sin embargo, otra solución puede ser obtener el eje del gráfico y luego cambiar solo los valores y:

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

thetarro
fuente
1
Puede configurar x1 y x2 Ninguno.
Hielke Walinga
78

Una cosa que puede hacer es establecer su rango de eje usted mismo utilizando matplotlib.pyplot.axis.

matplotlib.pyplot.axis

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

0,10 es para el rango del eje x. 0,20 es para el rango del eje y.

o también puede usar matplotlib.pyplot.xlim o matplotlib.pyplot.ylim

matplotlib.pyplot.ylim

plt.ylim(-2, 2)
plt.xlim(0,10)
Birat Bose
fuente
24

Puede crear una instancia de un objeto matplotlib.pyplot.axesy llamarlo set_ylim(). Sería algo como esto:

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

Esto funcionó al menos en matplotlib versión 2.2.2:

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

Probablemente esta sea una buena manera de configurar, por ejemplo, solo xmin e ymax, etc.

Antti A
fuente
14

Para agregar a la respuesta de @ Hima, si desea modificar un límite x o y actual, puede usar lo siguiente.

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)

Encuentro esto particularmente útil cuando quiero alejar o acercar un poco desde la configuración de trazado predeterminada.

Steven C. Howell
fuente
7

Esto debería funcionar. Tu código funciona para mí, como para Tamás y Manoj Govindan. Parece que podrías intentar actualizar Matplotlib. Si no puede actualizar Matplotlib (por ejemplo, si tiene derechos administrativos insuficientes), tal vez matplotlib.use()podría ser útil usar un backend diferente .

Eric O Lebigot
fuente
¡Gracias por revisar! Estoy usando el backend pdf ( matplotlib.use('PDF')). Estoy usando la versión que viene con la última versión de la distribución Enthought Python. ¿Puedes ver si funciona con el backend PDF? ¡Gracias!
Curious2learn
Funciona con el backend PDF, en Mac OS X. ¿Está seguro de que el archivo de salida se actualiza realmente plt.savefig()?
Eric O Lebigot
Me di cuenta del problema, creo. Si salgo aPlot =en la plt.subplotlínea, a mí también me funciona. Parece que si se asigna la subtrama a una variable como esa, se debe utilizar algún otro método para establecer los límites de los ejes. ¿Es eso cierto?
Curious2learn
1
Hasta donde yo sé, plt.ylim()aplica los límites a los ejes actuales, que se establecen cuando lo hace plt.subplot(). Tampoco puedo creer que me plt.subplot()importe cómo se usan los ejes que devuelve (poner en una variable o no, etc.). Entonces diría que debería funcionar; funciona en mi máquina
Eric O Lebigot
6

Solo para un ajuste fino. Si desea establecer solo uno de los límites del eje y dejar que el otro límite no cambie, puede elegir una o más de las siguientes afirmaciones

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

Eche un vistazo a la documentación para xlim y para ylim

amado por Jesús
fuente
0

Si un eje (generado por el código debajo del código que se muestra en la pregunta) comparte el rango con los primeros ejes, asegúrese de establecer el rango después del último diagrama de esos ejes.

Rainald62
fuente