web-dev-qa-db-fra.com

matplotlib obtenir des valeurs ylim

J'utilise matplotlib pour tracer des données (à l'aide des fonctions plot et errorbar) de Python. Je dois tracer un ensemble de tracés totalement séparés et indépendants, puis ajuster leurs valeurs ylim afin qu'elles puissent être facilement comparées visuellement.

Comment puis-je récupérer les valeurs ylim de chaque tracé afin de pouvoir prendre les valeurs min et max des valeurs ylim inférieure et supérieure, respectivement, et ajuster les tracés de manière à pouvoir les comparer visuellement?

Bien sûr, je pourrais simplement analyser les données et créer mes propres valeurs personnalisées ylim ... mais j'aimerais utiliser matplotlib pour le faire à ma place. Des suggestions sur la façon de le faire 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)
90
synaptik

Il suffit d'utiliser axes.get_ylim(), il est très similaire à set_ylim. De la docs :

get_ylim ()

Obtenir la plage d'axe des y [bas, haut]

116
elyase
 ymin, ymax = axes.get_ylim()

Si vous utilisez la structure plt, pourquoi même s'embêter avec les axes? Cela devrait fonctionner:

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)

Ou n'est-ce pas le cas?

29
Adam Hughes

En tirant parti des bonnes réponses ci-dessus et en supposant que vous utilisiez uniquement 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 devrait produire le tracé de sortie suivant. enter image description here

1
Thom Ives