Matplotlib retour d'une parcelle objet
J'ai une fonction qui encapsule pyplot.plt
afin que je puisse rapidement créer des graphiques avec souvent utilisée par défaut:
def plot_signal(time, signal, title='', xlab='', ylab='',
line_width=1, alpha=1, color='k',
subplots=False, show_grid=True, fig_size=(10, 5)):
# Skipping a lot of other complexity here
f, axarr = plt.subplots(figsize=fig_size)
axarr.plot(time, signal, linewidth=line_width,
alpha=alpha, color=color)
axarr.set_xlim(min(time), max(time))
axarr.set_xlabel(xlab)
axarr.set_ylabel(ylab)
axarr.grid(show_grid)
plt.suptitle(title, size=16)
plt.show()
Cependant, il ya des moments où je voudrais être en mesure de retourner l'intrigue donc je pouvez manuellement ajouter/modifier des choses pour un graphique spécifique. Par exemple, je veux être en mesure de modifier les étiquettes de l'axe, ou ajouter une deuxième ligne à la parcelle après l'appel de la fonction:
import numpy as np
x = np.random.rand(100)
y = np.random.rand(100)
plot = plot_signal(np.arange(len(x)), x)
plot.plt(y, 'r')
plot.show()
J'ai vu à quelques questions sur ce (Comment faire pour retourner un matplotlib.figure.La Figure de l'objet de Pandas fonction plot? et AttributeError: 'Figure' objet n'a pas d'attribut de 'complot') et comme un résultat, j'ai essayé d'ajouter le texte suivant à la fin de la fonction:
return axarr
return axarr.get_figure()
return plt.axes()
Cependant, ils sont tous de retour une erreur similaire: AttributeError: 'AxesSubplot' object has no attribute 'plt'
Quel est le bon chemin à suivre pour retourner un complot de l'objet afin de pouvoir le modifier plus tard?
fig = plt.gcf()
?Tout est bon ici, sauf pour l'appel à
plot.plt()
au lieu de plot.plot()
. Stupide erreur; peut arriver à tout le monde 🙂OriginalL'auteur Simon | 2017-05-11
Vous devez vous connecter pour publier un commentaire.
Je pense que l'erreur est assez explicite. Il n'y a pas une telle chose comme
pyplot.plt
, ou similaire.plt
est la quasi standard forme abrégée de pyplot lorsqu'elles ont été importées, soitimport matplotlib.pyplot as plt
.Concernant le problème, la première approche,
return axarr
est le plus polyvalent un seul. Vous obtenez un des axes, ou un tableau de haches, et peut parcelle.Le code peut ressembler à
OriginalL'auteur ImportanceOfBeingErnest