Come impostare "auto" per il limite superiore, ma mantenere un limite inferiore fisso con matplotlib.pyplot


112

Voglio impostare il limite superiore dell'asse y su "auto", ma voglio mantenere il limite inferiore dell'asse y sempre a zero. Ho provato "auto" e "autorange", ma non sembrano funzionare. Grazie in anticipo.

Ecco il mio codice:

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

Risposte:


104

Puoi passare solo lefto righta set_xlim:

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

Per l'asse y, usa bottomo top:

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

1
Ho ricevuto un errore quando ho passato la sinistra per set_ylim. Ho usato questo invece: plt.gca (). Set_ylim (ymin = 0) Grazie per il tuo aiuto.
vietnastee

È inoltre possibile utilizzare plt.xlimo plt.ylimper impostare i limiti per l'asse corrente.
Chris

26
Quando lo faccio, il limite superiore si attacca al valore in cui viene istanziata la finestra. Non rimane in scala automatica.
Elliot

8
Stesso problema di @Elliot qui. Può essere risolto impostando ylim / xlim (unilaterale) dopo aver tracciato i valori.
fabianfuchs

5
Assicurati di impostare il limite dopo aver tracciato i dati, altrimenti il ​​limite superiore sarà predefinito su 1.
Banana

37

Basta impostare xlimuno dei limiti:

plt.xlim(xmin=0)

5
xmine xmaxsono stati deprecati a favore di lefte rightin Matplotlib 3.0.
onewhaleid

12

Come accennato in precedenza e secondo la documentazione di matplotlib, i limiti x di un dato asse axpossono essere impostati utilizzando il set_xlimmetodo della matplotlib.axes.Axesclasse.

Per esempio,

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

Un limite può essere lasciato invariato (ad esempio il limite sinistro):

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

Per impostare i limiti x dell'asse corrente, il matplotlib.pyplotmodulo contiene la xlimfunzione che racchiude matplotlib.pyplot.gcae 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

Allo stesso modo, per i limiti y, usa matplotlib.axes.Axes.set_ylimo matplotlib.pyplot.ylim. Gli argomenti della parola chiave sono tope bottom.


3

Basta aggiungere un punto su @silvio: se usi l'asse per tracciare il simile figure, ax1 = plt.subplots(1,2,1). Allora ax1.set_xlim(xmin = 0)funziona anche!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.