En conclusion, la solution est «plt.close ()».
Dans un environnement jupyter (Google Colab.), Si vous souhaitez utiliser matplotlib pour générer un grand nombre de graphiques et les enregistrer sous forme de fichier image, ou si vous ne souhaitez pas afficher le graphique dans la cellule ** résultat d'exécution (à l'écran) du notebook **il y a.
En particulier, si vous essayez d'afficher plus de 20 graphiques, vous obtiendrez l'avertissement suivant.
/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
).
Une note pour éviter ce problème.
Le code suivant est "Générer 40 nombres aléatoires normaux selon une moyenne de 50 et un écart type de 10, dessiner un histogramme et l'enregistrer sous forme de fichier png".
Pour voir la distribution de chaque ensemble en essayant 50 ensembles, nous passons par 50 boucles.
Un grand nombre de graphiques sont affichés dans la cellule de résultat d'exécution
import numpy as np
import matplotlib.pyplot as plt
#Générer 50 fichiers image
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') #Enregistrer en tant que fichier image
Lorsque j'exécute le code ci-dessus, ** l'avertissement au début est affiché ** et un grand nombre de graphiques sont alignés dans la cellule de résultat d'exécution, ce qui rend le cahier difficile à voir. En même temps, le cahier (xxxx.ipynb
) contient également l'image du résultat de l'exécution, donc la taille du fichier augmentera également.
plt.show ()
.La solution est de mettre plt.close ()
après la sortie du graphique dans un fichier plt.savefig (...)
.
Ne pas afficher le graphique dans la cellule de résultat d'exécution
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() #■■■ Ajout ■■■
Lorsque j'exécute le code ci-dessus, rien n'est généré dans la cellule de résultat d'exécution. Bien entendu, la sortie du fichier se fera sans aucun problème.
Recommended Posts