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

Отримайте діапазон осі у [нижній, верхній]


2
чи є спосіб отримати обмеження площі графіка, а не межа осі? Чорний обмежуючий прямокутник трохи перевищує ці значення.
Пітер Ерліх

@PeterEhrlich Це лише поля.
ilija139

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

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

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