Jak ustawić „auto” dla górnego limitu, ale zachować stałą dolną granicę za pomocą matplotlib.pyplot

112

Chcę ustawić górną granicę osi Y na „auto”, ale chcę, aby dolna granica osi Y zawsze wynosiła zero. Próbowałem „auto” i „autorange”, ale wydaje się, że nie działają. Z góry dziękuję.

Oto mój kod:

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
źródło

Odpowiedzi:

104

Możesz zdać tylko leftlub rightdo set_xlim:

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

Dla osi y użyj bottomlub top:

plt.gca().set_ylim(bottom=0)
ecatmur
źródło
1
Pojawił się błąd, kiedy minąłem lewą stronę dla set_ylim. Zamiast tego użyłem tego: plt.gca (). Set_ylim (ymin = 0) Dziękuję za pomoc.
vietnastee
Możesz także użyć plt.xlimlub, plt.ylimaby ustawić limity dla bieżącej osi.
Chris
26
Kiedy to robię, górny limit pozostaje bez względu na wartość, w której wystąpi okno. Nie pozostaje to automatyczne skalowanie.
Elliot
8
Ten sam problem, co @Elliot tutaj. Można to naprawić, ustawiając (jednostronny) ylim / xlim po wykreśleniu wartości.
fabianfuchs
5
Upewnij się, że ustawiłeś limit po wykreśleniu danych, w przeciwnym razie górny limit będzie domyślnie ustawiony na 1.
Banan
37

Po prostu ustaw xlimjeden z limitów:

plt.xlim(xmin=0)
silviomoreto
źródło
5
xmini xmaxzostała zastąpiona leftoraz rightw matplotlib 3.0.
onewhaleid
12

Jak wspomniano wcześniej i zgodnie z dokumentacją matplotlib, granice x danej osi axmożna ustawić set_xlimmetodą matplotlib.axes.Axesklasy.

Na przykład,

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

Jeden limit może pozostać niezmieniony (np. Lewy 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)

Aby ustawić granice x bieżącej osi, matplotlib.pyplotmoduł zawiera xlimfunkcję, która po prostu zawija matplotlib.pyplot.gcai 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

Podobnie w przypadku granic y użyj matplotlib.axes.Axes.set_ylimlub matplotlib.pyplot.ylim. Argumentami słów kluczowych są topi bottom.

Remi Cuingnet
źródło
3

Po prostu dodaj punkt na @silvio: jeśli używasz osi do rysowania jak figure, ax1 = plt.subplots(1,2,1). Wtedy ax1.set_xlim(xmin = 0)też działa!

Skywalker326
źródło