matplotlib obtiene valores de ylim

115

Estoy usando matplotlibpara trazar datos (usando ploty errorbarfunciones) de Python. Tengo que trazar un conjunto de gráficos totalmente separados e independientes, y luego ajustar sus ylimvalores para que puedan compararse visualmente fácilmente.

¿Cómo puedo recuperar los ylimvalores de cada gráfico, de modo que pueda tomar el mínimo y el máximo de los valores ylim superior e inferior, respectivamente, y ajustar los gráficos para poder compararlos visualmente?

Por supuesto, podría simplemente analizar los datos y generar mis propios ylimvalores personalizados ... pero me gustaría usar matplotlibpara hacerlo por mí. ¿Alguna sugerencia sobre cómo hacer esto de manera fácil (y eficiente)?

Aquí está mi función de Python que traza 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
fuente

Respuestas:

159

Solo utilícelo axes.get_ylim(), es muy similar a set_ylim. De los documentos :

get_ylim ()

Obtener el rango del eje y [abajo, arriba]

elyase
fuente
2
¿Hay alguna forma de obtener el límite del área del gráfico, en lugar del límite del eje? El rectángulo delimitador negro está un poco más allá de estos valores.
Peter Ehrlich
@PeterEhrlich Eso es solo los márgenes.
ilija139
12
Me resulta plt.gca().get_ylim()útil, no es necesario definir ejes adicionales.
Matthias Arras
Alternativamente, prefiero usar fig, ax = plt.subplots()y luego enrutar todas mis funciones a través de figoax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Si está utilizando la pltAPI directamente, puede evitar las llamadas a los ejes por completo:

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

Aprovechando las buenas respuestas anteriores y asumiendo que solo estaba usando plt como en

import matplotlib.pyplot as plt

entonces puede obtener los cuatro límites de la trama usando plt.axis()como en el siguiente ejemplo.

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

El código anterior debería producir el siguiente gráfico de salida. ingrese la descripción de la imagen aquí

Thom Ives
fuente