Cómo configurar ‘auto’ para el límite superior, pero mantener un límite inferior fijo

4 minutos de lectura

avatar de usuario de vietnastee
vietnamita

Quiero establecer el límite superior del eje y en ‘automático’, pero quiero mantener el límite inferior del eje y siempre en cero. Probé ‘auto’ y ‘autorange’, pero parece que no funcionan.

Aquí está mi código:

import matplotlib.pyplot as plt

def plot(results_plt,title,filename):

    ############################
    # Plot results

    # mirror result table such that each parameter forms an own data array
    plt.cla()
    #print results_plt
    XY_results = []

    XY_results = zip( *results_plt)

    plt.plot(XY_results[0], XY_results[2], marker = ".")

    plt.title('%s' % (title) )
    plt.xlabel('Input Voltage [V]')
    plt.ylabel('Input Current [mA]')

    plt.grid(True)
    plt.xlim(3.0, 4.2)  #***I want to keep these values fixed"
    plt.ylim([0, 80]) #****CHANGE**** I want to change '80' to auto, but still keep 0 as the lower limit 
    plt.savefig(path+filename+'.png')

avatar de usuario de ecatmur
ecatmur

Puedes pasar solo left o right a set_xlim:

plt.gca().set_xlim(left=0)

Para el eje y, utilice bottom o top:

plt.gca().set_ylim(bottom=0)

Nota importante: “debe usar las funciones DESPUÉS de haber trazado los datos. Si no hace esto, usará el valor predeterminado 0 para izquierda/abajo y 1 para arriba/derecha”. – La respuesta de Luc.

  • Recibí un error cuando pasé la izquierda para el set_ylim. Usé esto en su lugar: plt.gca().set_ylim(ymin=0) Gracias por su ayuda.

    – vietnamita

    31 de julio de 2012 a las 22:34


  • También puedes usar plt.xlim o plt.ylim para establecer los límites para el eje actual.

    – Chris

    1 de agosto de 2012 a las 9:11

  • Cuando hago esto, el límite superior se adhiere a cualquier valor en el que se instancia la ventana. No permanece escalado automáticamente.

    – Elliot

    26 de febrero de 2014 a las 19:06

  • Mismo problema que @Elliot aquí. Se puede arreglar configurando el ylim/xlim (unilateral) después de graficar los valores.

    – fabianfuchs

    30 de marzo de 2015 a las 16:13

  • Asegúrese de establecer el límite después de trazar los datos, o el límite superior se establecerá de forma predeterminada en 1.

    – dwitvliet

    13/09/2018 a las 21:45

avatar de usuario de silviomoreto
silviomoreto

solo configura xlim para uno de los límites:

plt.xlim(left=0)

  • xmin y xmax han sido desaprobados en favor de left y right en Matplotlib 3.0.

    – onewhaleid

    23/09/2018 a las 22:38

Como se mencionó anteriormente y de acuerdo con la documentación de matplotlib, los límites x de un eje dado ax se puede configurar usando el set_xlim metodo de la matplotlib.axes.Axes clase.

Por ejemplo,

>>> ax.set_xlim(left_limit, right_limit)
>>> ax.set_xlim((left_limit, right_limit))
>>> ax.set_xlim(left=left_limit, right=right_limit)

Un límite puede dejarse sin cambios (por ejemplo, el límite izquierdo):

>>> ax.set_xlim((None, right_limit))
>>> ax.set_xlim(None, right_limit)
>>> ax.set_xlim(left=None, right=right_limit)
>>> ax.set_xlim(right=right_limit)

Para establecer los límites x del eje actual, el matplotlib.pyplot módulo contiene el xlim función que simplemente envuelve matplotlib.pyplot.gca y matplotlib.axes.Axes.set_xlim.

def xlim(*args, **kwargs):
    ax = gca()
    if not args and not kwargs:
        return ax.get_xlim()
    ret = ax.set_xlim(*args, **kwargs)
    return ret

De manera similar, para los límites de y, use matplotlib.axes.Axes.set_ylim o matplotlib.pyplot.ylim. Los argumentos de palabra clave son top y bottom.

El set_xlim y set_ylim permiso None valores para lograrlo. Sin embargo, debe utilizar las funciones DESPUÉS usted ha trazado los datos. Si no hace esto, usará el valor predeterminado 0 para izquierda/abajo y 1 para arriba/derecha. No vuelve a calcular el límite “automático” cada vez que traza nuevos datos una vez que ha establecido los límites.

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot([0, 1, 4, 5], [3, 5, 6, 9])
ax.set_xlim(left=2, right=None)
ax.set_ylim(bottom=None, top=7)

plt.show()

(Es decir, en el ejemplo anterior, si hiciera ax.plot(...) al final, no dará el efecto deseado.)

Simplemente agregue un punto en @silvio: si usa el eje para trazar como figure, ax1 = plt.subplots(1,2,1). Entonces ax1.set_xlim(xmin = 0) también funciona!

  • Esto se depreciará en matplotlib v3.0 según una advertencia que recibí

    – Bryan P.

    21 de marzo de 2021 a las 23:03

Avatar de usuario de Jim
Jim

También puedes hacer:

ax.set_xlim((None,upper_limit))
ax.set_xlim((lower_limit,None))

Eso es útil si desea usar set(), que le permite establecer varios parámetros a la vez:

ax.set(xlim=(None, 3e9), title="my_title", xlabel="my_x_label", ylabel="my_ylabel")

  • Esto se depreciará en matplotlib v3.0 según una advertencia que recibí

    – Bryan P.

    21 de marzo de 2021 a las 23:03

¿Ha sido útil esta solución?