Zusammenfassend lautet die Lösung "plt.close ()".
Wenn Sie in einer Jupyter-Umgebung (Google Colab.) Mit matplotlib eine große Anzahl von Diagrammen generieren und als Bilddatei speichern möchten oder wenn Sie das Diagramm nicht in der ** Ausführungsergebniszelle (auf dem Bildschirm) des Notizbuchs anzeigen möchten **es gibt.
Insbesondere wenn Sie versuchen, mehr als 20 Diagramme anzuzeigen, wird die folgende Warnung angezeigt.
/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:8: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (
matplotlib.pyplot.figure
) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParamfigure.max_open_warning
).
Ein Hinweis zur Vermeidung dieses Problems.
Der folgende Code lautet "Generieren Sie 40 normale Zufallszahlen nach einem Durchschnitt von 50 und einer Standardabweichung von 10, zeichnen Sie ein Histogramm und speichern Sie es als PNG-Datei".
Um die Verteilung jedes Satzes zu sehen, wenn 50 Sätze ausprobiert werden, durchlaufen wir 50 Schleifen.
In der Ausführungsergebniszelle wird eine große Anzahl von Diagrammen ausgegeben
import numpy as np
import matplotlib.pyplot as plt
#Generieren Sie 50 Bilddateien
for i in range(50) :
dat = (np.random.normal(50,10,size=40)).astype(np.int64)
plt.figure()
plt.hist(dat,bins=10,range=(0,100))
plt.yticks(range(0,31,10))
plt.xlim(0,100)
plt.ylim(0,30)
plt.savefig(f'fig{i}.png') #Als Bilddatei speichern
Wenn ich den obigen Code ausführe, wird ** die Warnung am Anfang angezeigt ** und eine große Anzahl von Diagrammen wird in der Ausführungsergebniszelle aufgereiht, wodurch das Notizbuch schwer zu sehen ist. Gleichzeitig enthält das Notizbuch (xxxx.ipynb
) auch das Image des Ausführungsergebnisses, sodass sich auch die Dateigröße erhöht.
Die Lösung besteht darin, "plt.close ()" zu setzen, nachdem das Diagramm in eine Datei "plt.savefig (...)" ausgegeben wurde.
Geben Sie kein Diagramm in die Ausführungsergebniszelle aus
import numpy as np
import matplotlib.pyplot as plt
for i in range(50) :
dat = (np.random.normal(50,10,size=40)).astype(np.int64)
plt.figure()
plt.hist(dat,bins=10,range=(0,100))
plt.yticks(range(0,31,10))
plt.xlim(0,100)
plt.ylim(0,30)
plt.savefig(f'fig{i}.png')
plt.close() #■■■ Ergänzung ■■■
Wenn ich den obigen Code ausführe, wird nichts in die Ausführungsergebniszelle ausgegeben. Natürlich erfolgt die Dateiausgabe ohne Probleme.
Recommended Posts