Як встановити "auto" для верхньої межі, але дотримуйтесь фіксованої нижньої межі за допомогою matplotlib.pyplot


112

Я хочу встановити верхню межу осі у «авто», але я хочу, щоб нижня межа осі у завжди була нульовою. Я спробував "auto" та "autorange", але, схоже, це не працює. Спасибі заздалегідь.

Ось мій код:

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)

Для осі у використовуйте bottomабо top:

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

1
Я отримав помилку, коли перейшов ліворуч на set_ylim. Я використовував це замість цього: plt.gca (). Set_ylim (ymin = 0) Дякую за допомогу.
В'єтнасті

Ви також можете використовувати plt.xlimабо plt.ylimвстановити межі для поточної осі.
Кріс

26
Коли я це роблю, верхня межа дотримується будь-якого значення, яке створює вікно. Це не залишається автоматичним масштабуванням.
Елліот

8
Те саме, що тут і @Elliot. Можна виправити, встановивши (однобічний) ylim / xlim після виведення значень.
fabianfuchs

5
Не забудьте встановити ліміт після розміщення даних, або верхня межа за замовчуванням до 1.
Banana


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 's: якщо ви використовуєте ось для побудови сюжету figure, ax1 = plt.subplots(1,2,1). Тоді ax1.set_xlim(xmin = 0)також працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.