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?

Avez-vous essayé de retourner 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