web-dev-qa-db-fra.com

Comment définir "auto" pour la limite supérieure, tout en conservant une limite inférieure fixe avec matplotlib.pyplot

Je souhaite définir la limite supérieure de l'axe des ordonnées sur 'auto', mais je souhaite que la limite inférieure de l'axe des ordonnées soit toujours égale à zéro. J'ai essayé 'auto' et 'autorange', mais ceux-ci ne semblent pas fonctionner. Merci d'avance.

Voici mon code:

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')
94
vietnastee

Vous pouvez simplement passer left ou right à set_xlim:

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

Pour l'axe des y, utilisez bottom ou top:

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

Il suffit de définir xlim pour l’une des limites:

plt.xlim(xmin=0)
35
silviomoreto

Comme indiqué ci-dessus et selon la documentation de matplotlib, les limites x d'un axe donné ax peuvent être définies à l'aide de la méthode set_xlim de la méthode matplotlib.axes.Axes classe.

Par exemple,

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

Une limite peut rester inchangée (par exemple la limite gauche):

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

Pour définir les limites x de l'axe actuel, le module matplotlib.pyplot Contient la fonction xlim qui enveloppe simplement matplotlib.pyplot.gca Et 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 même, pour les limites y, utilisez matplotlib.axes.Axes.set_ylim Ou matplotlib.pyplot.ylim. Les arguments de mots clés sont top et bottom.

6
Remi Cuingnet

Ajoutez simplement un point sur celui de @silvio: si vous utilisez un axe pour tracer comme figure, ax1 = plt.subplots(1,2,1). Alors ax1.set_xlim(xmin = 0) fonctionne aussi!

3
Skywalker326