Ich muss eine Figur in einer Datei erstellen, ohne sie im IPython-Notizbuch anzuzeigen. Die Wechselwirkung zwischen IPython
und matplotlib.pylab
in dieser Hinsicht ist mir nicht klar . Aber wenn ich anrufe, wird pylab.savefig("test.png")
die aktuelle Zahl angezeigt und zusätzlich gespeichert test.png
. Wenn Sie die Erstellung einer großen Anzahl von Plotdateien automatisieren, ist dies häufig unerwünscht. Oder in dem Fall, dass eine Zwischendatei für die externe Verarbeitung durch eine andere App gewünscht wird.
Ich bin mir nicht sicher, ob dies eine matplotlib
oder eine IPython
Notebook-Frage ist.
ioff
Antworten:
Dies ist eine matplotlib-Frage, und Sie können dies umgehen, indem Sie ein Backend verwenden, das dem Benutzer nicht angezeigt wird, z. B. 'Agg':
BEARBEITEN: Wenn Sie die Fähigkeit zum Anzeigen von Plots nicht verlieren möchten, deaktivieren Sie den interaktiven Modus und rufen
plt.show()
Sie nur an, wenn Sie bereit sind, die Plots anzuzeigen:quelle
close()
und zu sprechenshow()
, die Ihr Problem lösen sollen. Das schnelle Auswechseln von Backends wird nicht unterstützt, wie Sie festgestellt haben.plt.plot()
wenn der interaktive Modus aktiviert ist. Durch Deaktivieren des interaktiven Modus wird die Anzeige von Plots bis verzögertplt.show()
. Da Sie das ipython-Notizbuch verwenden, wird der interaktive Modus anders behandelt.matplotlib.use('Agg')
allein der Trick getan. Ich brauchte keineplt.show()
oder überhaupt keinenplt.ioff()
Code.Wir brauchen nicht
plt.ioff()
oderplt.show()
(wenn wir verwenden%matplotlib inline
). Sie können den obigen Code ohne testenplt.ioff()
.plt.close()
hat die wesentliche Rolle. Probier diese:Wenn Sie diesen Code in iPython ausführen, wird ein zweiter Plot angezeigt, und wenn Sie ihn
plt.close(fig2)
am Ende hinzufügen , wird nichts angezeigt .Abschließend , wenn Sie Abbildung in der Nähe
plt.close(fig)
, wird es nicht angezeigt.quelle
plt.ioff
bekomme ichRuntimeWarning: More than 20 figures have been opened...
.plt.close
Ich habe es gelöst.