Verhindern Sie, dass die Handlung im Jupyter-Notizbuch angezeigt wird


71

Wie kann ich verhindern, dass ein bestimmtes Diagramm im Jupyter-Notizbuch angezeigt wird? Ich habe mehrere Diagramme in einem Notizbuch, aber ich möchte, dass eine Teilmenge davon in einer Datei gespeichert und nicht auf dem Notizbuch angezeigt wird, da dies erheblich verlangsamt wird.

Ein minimales Arbeitsbeispiel für ein Jupyter-Notebook ist:

%matplotlib inline 
from numpy.random import randn
from matplotlib.pyplot import plot, figure
a=randn(3)
b=randn(3)
for i in range(10):
    fig=figure()
    plot(b)
    fname='s%03d.png'%i
    fig.savefig(fname)
    if(i%5==0):
        figure()
        plot(a)

Wie Sie sehen können, habe ich zwei Arten von Plots, a und b. Ich möchte, dass a gezeichnet und angezeigt werden, und ich möchte nicht, dass die b-Diagramme angezeigt werden. Ich möchte nur, dass sie in einer Datei gespeichert werden. Hoffentlich beschleunigt dies die Dinge ein wenig und verschmutzt mein Notizbuch nicht mit Zahlen, die ich nicht sehen muss.

Vielen Dank für Ihre Zeit



2
Ehrlich gesagt, ich habe die Antworten auf diese Frage nicht verstanden
habe

Antworten:


91

Vielleicht einfach die Achse löschen, zum Beispiel:

fig= plt.figure()
plt.plot(range(10))
fig.savefig("save_file_name.pdf")
plt.close()

zeichnet die Ausgabe nicht im inlineModus. Ich kann nicht herausfinden, ob die Daten wirklich gelöscht werden.


Die Ausgabe wird nicht geplottet, sondern <matplotlib.figure.Figure at 0x31c0d50> zurückgegeben. Wie kann ich dies verhindern?
Gota

2
Ich habe die Antwort aktualisiert und verwende plt.close()dies nicht. Ich denke, es ist eine Art Hinweis auf die übrig gebliebene Figur, aber ich bin mir nicht sicher.
Greg

3
Dies ist subtil, aber ein Wechsel plt.close()zu plt.close();sollte sollte den Trick tun. Dies funktionierte für mich auf IPython 2 und Matplotlib 1.3.1
Aron Ahmadia

In meinem Fall notebookerzeugt diese Methode im Modus immer noch einen leeren Bereich in der Ausgabezelle, der mein Notizbuch überfüllt, wenn mehrere Diagramme gleichzeitig ausgeführt werden. Ich wickelte meine Plotten Routine in einem Paar plt.ioff()und plt.ion()und jetzt gibt es keine mehr Unordnung.
Sonntag,

41

Ich konnte verhindern, dass meine Figuren angezeigt werden, indem ich den interaktiven Modus mithilfe der Funktion ausschaltete

plt.ioff ()


2
Sehr hilfreich, wenn Sie mpld3 (oder ähnliches) verwenden, um interaktive Online-Figuren %matplotlib notebookzu erstellen und statische Figuren in der Vorschau anzuzeigen .
Reise

4
@Brian Warum sollte dies die neu akzeptierte Antwort sein? Wie ist diese Methode besser als die vorherige? Ist es allgemeiner?
Gota

34

Um die Ausgabe einer Jupiter-Notebook-Zelle zu verhindern, können Sie die Zelle mit starten

%%capture

Dies kann nützlich sein, wenn alle anderen hier gezeigten Methoden fehlschlagen.


14

Ab IPython 6.0 gibt es eine weitere Option, um die Inline-Ausgabe (vorübergehend oder dauerhaft) auszuschalten. Dies wurde in dieser Pull-Anfrage eingeführt .

Sie würden das "agg" Backend verwenden, um keine Inline-Ausgabe anzuzeigen.

%matplotlib agg

Es scheint jedoch, dass, wenn Sie zuerst das Inline-Backend aktiviert haben, dies zweimal aufgerufen werden muss, um wirksam zu werden.

%matplotlib agg
%matplotlib agg

So würde es in Aktion aussehen


1
Wissen Sie, warum agg zweimal aufgerufen werden muss, wenn inline bereits aufgerufen wurde?
Prasoon Varshney

7

Unter Jupyter 6.0 verwende ich das folgende Snippet, um die matplot lib-Zahlen selektiv nicht anzuzeigen.

import matplotlib as mpl

...

backend_ =  mpl.get_backend() 
mpl.use("Agg")  # Prevent showing stuff

# Your code

mpl.use(backend_) # Reset backend

6

Ich bin jedoch ein Anfänger außerhalb des Inline-Modus, wenn Sie die Ausgabe in Ihrem Notebook nicht sehen möchten, indem Sie:

%matplotlib auto

oder:

%matplotlib

um es zurück zu benutzen:

%matplotlib inline

Eine bessere Lösung wäre:

plt.ioff()

was sagt, Inline-Modus aus.

ich hoffe es hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.