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.


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])

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))


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)

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])

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.


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.


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 .


¡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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.