matplotlib obter valores ylim

115

Estou usando matplotlibpara traçar dados (usando plote errorbarfunções) do Python. Tenho que traçar um conjunto de parcelas totalmente separadas e independentes e, em seguida, ajustar seusylim valores para que possam ser facilmente comparados visualmente.

Como posso recuperar o ylim valores de cada gráfico, para que eu possa pegar o mínimo e o máximo dos valores de ylim inferior e superior, respectivamente, e ajustar os gráficos para que possam ser comparados visualmente?

Claro, eu poderia apenas analisar os dados e criar meus próprios ylimvalores personalizados ... mas gostaria de usarmatplotlib para fazer isso por mim. Alguma sugestão sobre como fazer isso de maneira fácil (e eficiente)?

Esta é minha função Python que plota usando 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
fonte

Respostas:

159

Basta usar axes.get_ylim(), é muito semelhante a set_ylim. Dos documentos :

get_ylim ()

Obtenha o intervalo do eixo y [inferior, superior]

eliase
fonte
2
existe uma maneira de obter o limite da área do gráfico, em vez do limite do eixo? O retângulo delimitador preto está um pouco além desses valores.
Peter Ehrlich
@PeterEhrlich São apenas as margens.
ilija139 de
12
Acho plt.gca().get_ylim()útil - não há necessidade de definição extra de eixos.
Matthias Arras
Como alternativa, prefiro usar fig, ax = plt.subplots()e, em seguida, rotear todas as minhas funções por meio de figouax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Se você estiver usando a pltapi diretamente, pode evitar chamadas para os eixos:

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
fonte
10

Aproveitando as boas respostas acima e presumindo que você estava usando apenas plt como em

import matplotlib.pyplot as plt

então você pode obter todos os quatro limites de plotagem usando plt.axis()como no exemplo a seguir.

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

O código acima deve produzir o seguinte gráfico de saída. insira a descrição da imagem aqui

Thom Ives
fonte