matplotlib obtenir les valeurs ylim

115

J'utilise matplotlibpour tracer des données (utilisation plotet errorbarfonctions) à partir de Python. Je dois tracer un ensemble de parcelles totalement séparées et indépendantes, puis ajuster leurs ylimvaleurs afin qu'elles puissent être facilement comparées visuellement.

Comment puis-je récupérer les ylimvaleurs de chaque tracé, de sorte que je puisse prendre le min et le max des valeurs ylim inférieures et supérieures, respectivement, et ajuster les tracés afin qu'ils puissent être comparés visuellement?

Bien sûr, je pourrais simplement analyser les données et proposer mes propres ylimvaleurs personnalisées ... mais j'aimerais utiliser matplotlibpour le faire pour moi. Des suggestions sur la façon de procéder facilement (et efficacement)?

Voici ma fonction Python qui trace en utilisant 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
la source

Réponses:

159

Il suffit d'utiliser axes.get_ylim(), c'est très similaire à set_ylim. À partir de la documentation :

get_ylim ()

Obtenez la plage de l'axe y [bas, haut]

elyase
la source
2
existe-t-il un moyen d'obtenir la limite de la zone du graphique plutôt que la limite de l'axe? Le rectangle englobant noir est légèrement au-delà de ces valeurs.
Peter Ehrlich
@PeterEhrlich Ce ne sont que les marges.
ilija139
12
Je trouve plt.gca().get_ylim()pratique - pas besoin de définition d'axes supplémentaires.
Matthias Arras
Sinon, je préfère utiliser fig, ax = plt.subplots()puis acheminer toutes mes fonctions via figouax
BallpointBen
34
 ymin, ymax = axes.get_ylim()

Si vous utilisez pltdirectement l' API, vous pouvez éviter complètement les appels aux axes:

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
la source
10

Tirer parti des bonnes réponses ci-dessus et en supposant que vous n'utilisiez que plt comme dans

import matplotlib.pyplot as plt

alors vous pouvez obtenir les quatre limites de tracé en utilisant plt.axis()comme dans l'exemple suivant.

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

Le code ci-dessus doit produire le tracé de sortie suivant. entrez la description de l'image ici

Thom Ives
la source