Comment définir 'auto' pour la limite supérieure, mais garder une limite inférieure fixe avec matplotlib.pyplot

112

Je souhaite définir la limite supérieure de l'axe y sur «auto», mais je souhaite que la limite inférieure de l'axe y soit toujours égale à zéro. J'ai essayé «auto» et «autorange», mais cela ne semble 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')
vietnastee
la source

Réponses:

104

Vous pouvez passer juste leftou rightà set_xlim:

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

Pour l'axe y, utilisez bottomou top:

plt.gca().set_ylim(bottom=0)
ecatmur
la source
1
J'ai eu une erreur quand j'ai passé la gauche pour le set_ylim. J'ai utilisé ceci à la place: plt.gca (). Set_ylim (ymin = 0) Merci pour votre aide.
vietnastee
Vous pouvez également utiliser plt.xlimou plt.ylimpour définir les limites de l'axe actuel.
Chris
26
Lorsque je fais cela, la limite supérieure reste à la valeur dans laquelle la fenêtre instancie. Elle ne reste pas à l'échelle automatique.
Elliot
8
Même problème que @Elliot ici. Peut être corrigé en définissant le ylim / xlim (unilatéral) après avoir tracé les valeurs.
fabianfuchs
5
Assurez-vous de définir la limite après avoir tracé les données, sinon la limite supérieure sera par défaut de 1.
Banana
37

Il suffit de définir l' xlimune des limites:

plt.xlim(xmin=0)
silviomoreto
la source
5
xminet xmaxont été déconseillés en faveur de leftet rightdans Matplotlib 3.0.
onewhaleid
12

Comme mentionné ci-dessus et selon la documentation matplotlib, les limites x d'un axe donné axpeuvent être définies en utilisant la set_xlimméthode de la matplotlib.axes.Axesclasse.

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 de 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 matplotlib.pyplotmodule contient la xlimfonction qui encapsule matplotlib.pyplot.gcaet 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_ylimou matplotlib.pyplot.ylim. Les arguments de mot-clé sont topet bottom.

Remi Cuingnet
la source
3

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

Skywalker326
la source