Как установить `` авто '' для верхнего предела, но сохранить фиксированный нижний предел с помощью matplotlib.pyplot

112

Я хочу установить верхний предел оси Y на «авто», но я хочу, чтобы нижний предел оси Y всегда был равен нулю. Я пробовал «авто» и «автоматический выбор диапазона», но они, похоже, не работают. Заранее спасибо.

Вот мой код:

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')
Вьетнамский
источник

Ответы:

104

Вы можете перейти просто leftили rightна set_xlim:

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

Для оси Y используйте bottomили top:

plt.gca().set_ylim(bottom=0)
ecatmur
источник
1
Я получил ошибку, когда прошел налево за set_ylim. Вместо этого я использовал это: plt.gca (). Set_ylim (ymin = 0) Спасибо за вашу помощь.
vietnastee
Вы также можете использовать plt.xlimили, plt.ylimчтобы установить пределы для текущей оси.
Крис
26
Когда я делаю это, верхний предел придерживается любого значения, в котором создается окно. Это не остается автоматическим масштабированием.
Эллиот
9
Та же проблема, что и у @Elliot. Может быть исправлено установкой (одностороннего) ylim / xlim после построения значений.
fabianfuchs
5
Обязательно установите предел после построения данных, иначе верхний предел по умолчанию будет равен 1.
Banana
37

Просто установите xlimодно из ограничений:

plt.xlim(xmin=0)
Silviomoreto
источник
5
xminи xmaxустарели в пользу leftи rightв Matplotlib 3.0.
onewhaleid
12

Как упоминалось выше и согласно документации matplotlib, пределы x данной оси axмогут быть установлены с помощью set_xlimметода matplotlib.axes.Axesкласса.

Например,

>>> ax.set_xlim(left_limit, right_limit)
>>> ax.set_xlim((left_limit, right_limit))
>>> ax.set_xlim(left=left_limit, right=right_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)

Чтобы установить x-пределы текущей оси, matplotlib.pyplotмодуль содержит xlimфункцию, которая просто обертывает matplotlib.pyplot.gcaи 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

Точно так же для y-пределов используйте matplotlib.axes.Axes.set_ylimили matplotlib.pyplot.ylim. Аргументы ключевого слова: topи bottom.

Реми Куингнет
источник
3

Просто добавьте точку на @silvio: если вы используете ось для построения подобного figure, ax1 = plt.subplots(1,2,1). Тогда ax1.set_xlim(xmin = 0)тоже работает!

Скайуокер326
источник