matplotlib pobiera wartości ylim

115

Używam matplotlibdo wykreślania danych (używania ploti errorbarfunkcji) z Pythona. Muszę wykreślić zestaw całkowicie oddzielnych i niezależnych wykresów, a następnie dostosować ich ylimwartości, aby można je było łatwo porównać wizualnie.

W jaki sposób mogę pobrać ylimwartości z każdego wykresu, tak aby uzyskać odpowiednio minimalne i maksymalne wartości dolnej i górnej wartości ylim oraz dostosować wykresy, aby można je było porównać wizualnie?

Oczywiście mógłbym po prostu przeanalizować dane i wymyślić własne ylimwartości niestandardowe ... ale chciałbym matplotlibto zrobić za mnie. Jakieś sugestie, jak łatwo (i skutecznie) to zrobić?

Oto moja funkcja Pythona, która wykreśla przy użyciu 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)
synaptik
źródło

Odpowiedzi:

159

Po prostu użyj axes.get_ylim(), jest bardzo podobny do set_ylim. Z dokumentów :

get_ylim ()

Pobierz zakres osi Y [dół, góra]

elyase
źródło
2
czy istnieje sposób na uzyskanie limitu obszaru wykresu zamiast ograniczenia osi? Czarny prostokąt ograniczający jest nieco poza tymi wartościami.
Peter Ehrlich,
@PeterEhrlich To tylko marginesy.
ilija139
12
Uważam, że plt.gca().get_ylim()jest to przydatne - nie ma potrzeby definiowania dodatkowych osi.
Matthias Arras
Alternatywnie wolę używać, fig, ax = plt.subplots()a następnie przekierowywać wszystkie moje funkcje przez jedną figlubax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Jeśli używasz pltinterfejsu API bezpośrednio, możesz całkowicie uniknąć wywołań osi:

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)
Adam Hughes
źródło
10

Wykorzystując powyższe dobre odpowiedzi i zakładając, że używasz tylko plt, jak w

import matplotlib.pyplot as plt

następnie możesz uzyskać wszystkie cztery granice wykresu, korzystając plt.axis()z poniższego przykładu.

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

Powyższy kod powinien dać następujący wykres wyjściowy. wprowadź opis obrazu tutaj

Thom Ives
źródło