Wie man 'auto' für die Obergrenze einstellt, aber mit matplotlib.pyplot eine feste Untergrenze einhält

112

Ich möchte die Obergrenze der y-Achse auf 'auto' setzen, aber ich möchte die Untergrenze der y-Achse so halten, dass sie immer Null ist. Ich habe 'auto' und 'autorange' ausprobiert, aber diese scheinen nicht zu funktionieren. Vielen Dank im Voraus.

Hier ist mein 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
quelle

Antworten:

104

Sie können nur leftoder rightan Folgendes übergeben set_xlim:

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

Verwenden Sie für die y-Achse bottomoder top:

plt.gca().set_ylim(bottom=0)
ecatmur
quelle
1
Ich habe eine Fehlermeldung erhalten, als ich die linke Seite für set_ylim übergeben habe. Ich habe dies stattdessen verwendet: plt.gca (). Set_ylim (ymin = 0) Vielen Dank für Ihre Hilfe.
Vietnamnaste
Sie können auch die Grenzwerte für die aktuelle Achse verwenden plt.xlimoder plt.ylimfestlegen.
Chris
26
Wenn ich dies tue, bleibt die Obergrenze bei dem Wert, in dem das Fenster instanziiert wird. Sie bleibt nicht automatisch skaliert.
Elliot
8
Gleiches Problem wie @Elliot hier. Kann durch Einstellen des (einseitigen) ylim / xlim nach dem Zeichnen der Werte behoben werden.
Fabianfuchs
5
Stellen Sie sicher, dass Sie den Grenzwert nach dem Zeichnen der Daten festlegen. Andernfalls wird der obere Grenzwert standardmäßig auf 1 gesetzt.
Banana
37

Stellen Sie einfach xlimeine der Grenzen ein:

plt.xlim(xmin=0)
silviomoreto
quelle
5
xminund xmaxwurden zugunsten von leftund rightin Matplotlib 3.0 abgelehnt .
Onewhaleid
12

Wie oben erwähnt und gemäß der Matplotlib-Dokumentation können die x-Grenzen einer bestimmten Achse axmit der set_xlimMethode der matplotlib.axes.AxesKlasse festgelegt werden.

Zum Beispiel,

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

Ein Limit kann unverändert bleiben (z. B. das linke Limit):

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

Um die x-Grenzen der aktuellen Achse matplotlib.pyplotfestzulegen, enthält das Modul die xlimFunktion, die nur matplotlib.pyplot.gcaund umschließt 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

Verwenden Sie für die y-Grenzen matplotlib.axes.Axes.set_ylimoder matplotlib.pyplot.ylim. Die Schlüsselwortargumente sind topund bottom.

Remi Cuingnet
quelle
3

Fügen Sie einfach einen Punkt auf @silvio hinzu: Wenn Sie die Achse verwenden, um wie zu zeichnen figure, ax1 = plt.subplots(1,2,1). Dann ax1.set_xlim(xmin = 0)funktioniert auch!

Skywalker326
quelle