J'ai besoin de créer une figure dans un fichier sans l'afficher dans le bloc-notes IPython. Je ne suis pas clair sur l'interaction entre IPython
et matplotlib.pylab
à cet égard. Mais, lorsque j'appelle, pylab.savefig("test.png")
le chiffre actuel s'affiche en plus d'être enregistré dans test.png
. Lors de l'automatisation de la création d'un grand ensemble de fichiers de tracé, cela n'est souvent pas souhaitable. Ou dans le cas où un fichier intermédiaire pour un traitement externe par une autre application est souhaité.
Je ne sais pas s'il s'agit d'une question matplotlib
ou d' un IPython
cahier.
ioff
Réponses:
Ceci est une question matplotlib, et vous pouvez contourner cela en utilisant un backend qui ne s'affiche pas pour l'utilisateur, par exemple 'Agg':
MODIFIER: Si vous ne voulez pas perdre la possibilité d'afficher les tracés, désactivez le mode interactif et n'appelez que
plt.show()
lorsque vous êtes prêt à afficher les tracés:la source
close()
etshow()
, ce qui devrait résoudre votre problème. le changement de backends à la volée n'est pas pris en charge, comme vous l'avez découvert.plt.plot()
si le mode interactif est activé. La désactivation du mode interactif retarde l'affichage de tous les tracés jusqu'àplt.show()
. Étant donné que vous utilisez le bloc-notes ipython, le mode interactif est traité différemment.matplotlib.use('Agg')
seul a fait l'affaire. Je n'en avais pas besoinplt.show()
niplt.ioff()
dans mon code du tout.Nous n'avons pas besoin de
plt.ioff()
ouplt.show()
(si nous utilisons%matplotlib inline
). Vous pouvez tester le code ci-dessus sansplt.ioff()
.plt.close()
a le rôle essentiel. Essaye celui-là:Si vous exécutez ce code dans iPython, il affichera un deuxième tracé, et si vous ajoutez
plt.close(fig2)
à la fin de celui-ci, vous ne verrez rien.En conclusion, si vous fermez la figure
plt.close(fig)
, elle ne sera pas affichée.la source
plt.ioff
je reçoisRuntimeWarning: More than 20 figures have been opened...
.plt.close
résolu.