Como definir 'auto' para o limite superior, mas manter um limite inferior fixo com matplotlib.pyplot

112

Desejo definir o limite superior do eixo y para 'automático', mas quero manter o limite inferior do eixo y sempre zero. Tentei 'auto' e 'autorange', mas eles não parecem funcionar. Agradeço antecipadamente.

Aqui está o meu código:

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
fonte

Respostas:

104

Você pode passar apenas leftou rightpara set_xlim:

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

Para o eixo y, use bottomou top:

plt.gca().set_ylim(bottom=0)
ecatmur
fonte
1
Recebi um erro quando passei a esquerda para o set_ylim. Em vez disso, usei: plt.gca (). Set_ylim (ymin = 0) Obrigado por sua ajuda.
vietnastee
Você também pode usar plt.xlimou plt.ylimpara definir os limites do eixo atual.
Chris
26
Quando faço isso, o limite superior se fixa a qualquer valor em que a janela instancia. Ele não permanece com escala automática.
Elliot
8
O mesmo problema que @Elliot aqui. Pode ser corrigido definindo ylim / xlim (unilateral) após plotar os valores.
fabianfuchs
5
Certifique-se de definir o limite após traçar os dados, ou o limite superior será o padrão para 1.
Banana
37

Basta definir xlimum dos limites:

plt.xlim(xmin=0)
silviomoreto
fonte
5
xmine xmaxforam preteridos em favor de lefte rightem Matplotlib 3.0.
onewhaleid
12

Conforme mencionado anteriormente e de acordo com a documentação do matplotlib, os limites x de um determinado eixo axpodem ser definidos usando o set_xlimmétodo da matplotlib.axes.Axesclasse.

Por exemplo,

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

Um limite pode ser deixado inalterado (por exemplo, o limite esquerdo):

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

Para definir os limites x do eixo atual, o matplotlib.pyplotmódulo contém a xlimfunção que envolve apenas 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

Da mesma forma, para os limites y, use matplotlib.axes.Axes.set_ylimou matplotlib.pyplot.ylim. Os argumentos da palavra-chave são tope bottom.

Remi Cuingnet
fonte
3

Basta adicionar um ponto no de @silvio: se você usar eixo para desenhar como figure, ax1 = plt.subplots(1,2,1). Então ax1.set_xlim(xmin = 0)também funciona!

Skywalker326
fonte