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)
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]
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?
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.