Cómo establecer el límite del eje y

3 minutos de lectura

Avatar de usuario de Curious2learn
curioso2aprender

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 esta gráfica, obtengo los límites del eje y de 20 y 200. Sin embargo, quiero los límites de 20 y 250.

  • 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?

    – Tamas

    23 de septiembre de 2010 a las 11:41

  • 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 Agg back-end

    – Manoj Govindan

    23 de septiembre de 2010 a las 11:50

  • Gracias a los dos. ¿Funciona con el backend de PDF para usted?

    – Curioso2aprender

    23 de septiembre de 2010 a las 12:26

  • Nota: axisbg ahora está en desuso

    – SherylHohman

    26 de marzo de 2017 a las 19:34

  • plt.ylim es la solución correcta y moderna a este problema. Aquí hay un buen recurso: showmecode.info/matplotlib/axes/set-limits

    – luc

    25/06/2020 a las 20:50

Avatar de usuario de Hima
hima

Obtener el eje actual a través de plt.gca()y luego establezca sus límites:

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

  • Por cierto, esta es una abreviatura tonta que significa “gramoy el Cactual axes”.

    – Lenar Hoyt

    8 mayo 2017 a las 10:57

  • también puede establecer un valor None lo que deja el cálculo a matplotlib, por ejemplo axes.set_ylim([ymin,None])

    – linqu

    13 de septiembre de 2018 a las 10:14

  • Hay otras opciones en lugar de usar None como en la publicación de @linqu: set_ylim(bottom=None, top=None, [...], *, ymin=None, ymax=None). bottom y ymin (equivalente) para mínimo. top y ymax) equivalente al máximo. No puedes usar ambos bottom y ymin En seguida. Lo mismo con top y ymax.

    – MaciekS

    4 de noviembre de 2021 a las 8:24


Una cosa que puede hacer es configurar el rango de su eje usted mismo usando 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)

avatar de usuario de thetarro
el tarro

Otra solución es obtener los ejes de la gráfica y reasignarlos cambiando solo los valores de y:

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

  • No necesitas agarrar x1 y x2puede hacer que matplotlib infiera esto con None.

    – iacob

    24/03/2021 a las 20:35

Avatar de usuario de Reza Keshavarz
Reza Keshavarz

Puede instanciar un objeto desde matplotlib.pyplot.axes y llama al set_ylim() en eso. Sería algo como esto:

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

avatar de usuario de amado.por.Jesus
amado.por.jesus

Solo para afinar. Si desea establecer solo uno de los límites del eje y dejar el otro límite sin cambios, puede elegir una o más de las siguientes declaraciones

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

Avatar de usuario de Antti A
antti a

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, xmin e ymax solamente, etc.

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 la configuración de trazado predeterminada.

¿Ha sido útil esta solución?