matplotlib получает значения ylim

115

Я использую matplotlibдля построения данных (используя plotи errorbarфункции) из Python. Мне нужно построить набор совершенно отдельных и независимых графиков, а затем настроить их ylimзначения, чтобы их можно было легко визуально сравнить.

Как я могу получить ylimзначения из каждого графика, чтобы взять минимальное и максимальное значения нижнего и верхнего значений ylim, соответственно, и настроить графики, чтобы их можно было визуально сравнить?

Конечно, я мог бы просто проанализировать данные и придумать свои собственные ylimзначения ... но я бы хотел использовать matplotlibэто для себя. Есть предложения, как это легко (и эффективно) сделать?

Вот моя функция Python, которая строит графики с использованием matplotlib:

import matplotlib.pyplot as plt

def myplotfunction(title, values, errors, plot_file_name):

    # plot errorbars
    indices = range(0, len(values))
    fig = plt.figure()
    plt.errorbar(tuple(indices), tuple(values), tuple(errors), marker='.')

    # axes
    axes = plt.gca()
    axes.set_xlim([-0.5, len(values) - 0.5])
    axes.set_xlabel('My x-axis title')
    axes.set_ylabel('My y-axis title')

    # title
    plt.title(title)

    # save as file
    plt.savefig(plot_file_name)

    # close figure
    plt.close(fig)
синаптик
источник

Ответы:

159

Просто используйте axes.get_ylim(), он очень похож на set_ylim. Из документов :

get_ylim ()

Получите диапазон оси Y [снизу, вверху]

Elyase
источник
2
есть ли способ получить предел области графика, а не предел оси? Черный ограничивающий прямоугольник немного превышает эти значения.
Питер Эрлих
@PeterEhrlich Это только поля.
ilija139 01
12
Я считаю, plt.gca().get_ylim()что это удобно - нет необходимости в дополнительном определении осей.
Матиас Аррас
В качестве альтернативы я предпочитаю использовать, fig, ax = plt.subplots()а затем маршрутизировать все свои функции через либо figилиax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Если вы используете pltapi напрямую, вы можете вообще избежать вызовов осей:

def myplotfunction(title, values, errors, plot_file_name):

    # plot errorbars
    indices = range(0, len(values))
    fig = plt.figure()
    plt.errorbar(tuple(indices), tuple(values), tuple(errors), marker='.')

    plt.xlim([-0.5, len(values) - 0.5])
    plt.xlabel('My x-axis title')
    plt.ylabel('My y-axis title')

    # title
    plt.title(title)

    # save as file
    plt.savefig(plot_file_name)

   # close figure
    plt.close(fig)
Адам Хьюз
источник
10

Используя хорошие ответы выше и предполагая, что вы использовали только plt, как в

import matplotlib.pyplot as plt

тогда вы можете получить все четыре предела графика, plt.axis()как в следующем примере.

import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8]  # fake data
y = [1, 2, 3, 4, 3, 2, 5, 6]

plt.plot(x, y, 'k')

xmin, xmax, ymin, ymax = plt.axis()

s = 'xmin = ' + str(round(xmin, 2)) + ', ' + \
    'xmax = ' + str(xmax) + '\n' + \
    'ymin = ' + str(ymin) + ', ' + \
    'ymax = ' + str(ymax) + ' '

plt.annotate(s, (1, 5))

plt.show()

Приведенный выше код должен создать следующий выходной график. введите описание изображения здесь

Том Айвз
источник