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)

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]


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)

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í

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.