[PYTHON] Lors de la génération d'un grand nombre de graphiques avec matplotlib, je ne souhaite pas afficher le graphique à l'écran (environnement jupyter)

En conclusion, la solution est «plt.close ()».

introduction

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 rcParam figure.max_open_warning).

Une note pour éviter ce problème.

Statut actuel

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.

Solution

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

Lors de la génération d'un grand nombre de graphiques avec matplotlib, je ne souhaite pas afficher le graphique à l'écran (environnement jupyter)
Je souhaite résoudre le problème de fuite de mémoire lors de la sortie d'un grand nombre d'images avec Matplotlib
Je veux afficher le nombre de num_boost_round lorsque early_stopping est appliqué à l'aide du rappel XGBoost (non atteint)
Je veux tracer les informations de localisation de GTFS Realtime sur Jupyter! (Avec ballon)
Je veux démarrer un environnement Jupyter avec une seule commande
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Afficher le graphique de tensorBoard sur Jupyter
J'ai essayé d'afficher la valeur d'altitude du DTM dans un graphique
Je veux éviter les problèmes de saisie lors du débogage de l'exemple de vérification des compétences de Paiza dans un environnement local tel que Jupyter [Python]
Je souhaite afficher plusieurs images avec matplotlib.
Je souhaite afficher uniquement différentes lignes du fichier texte avec diff
Que faire lorsque le graphique n'apparaît pas sur le notebook Jupyter (IPython)
Une bibliothèque pour la science des données "Je veux faire ça" sur le bloc-notes Jupyter
Un script qui combine les marges lors du collage d'un certain nombre de graphiques sur des tuiles avec gnuplot
Je souhaite prendre une capture d'écran du site sur Docker en utilisant n'importe quelle police
Je souhaite créer manuellement une légende avec matplotlib
Un outil pour suivre les affiches avec un grand nombre de likes sur instagram [25 minutes à 1 seconde]
Je souhaite être informé de l'environnement de connexion lorsque RaspberryPi se connecte au réseau
Notez ce que vous voulez faire à l'avenir avec Razpai
Je souhaite configurer un environnement de développement GUI avec Python ou Golang sur Mac
Je souhaite produire une carte thermique magnifiquement personnalisée de la matrice de corrélation. édition matplotlib
[Démarrage du shell] J'ai essayé d'afficher le shell sur le téléviseur avec un G-cluster à carte Linux bon marché
[Dessin graphique] J'ai essayé d'écrire un graphique à barres multi-séries avec matplotlib et seaborn
Comment tracer beaucoup de légendes en changeant la couleur du graphique en continu avec matplotlib
Procédures à suivre lorsque le japonais n'est pas affiché dans matplotlib
[Visualisation] Je veux dessiner un beau graphique avec Plotly
J'ai écrit le fonctionnement de base de matplotlib dans Jupyter Lab
J'ai dessiné un graphique Python en utilisant des données publiques sur le nombre de nouveaux patients positifs au coronavirus (COVID-19) à Tokyo + avec un lien vers la version nationale des données de pratique
Comment écrire quand on veut mettre un nombre après le numéro de groupe à remplacer par une expression régulière dans re.sub de Python
Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python
Gérez le chevauchement lors du dessin d'un diagramme de dispersion avec une grande quantité de données (Matplotlib, Pandas, Datashader)
Que faire lorsqu'une partie de l'image d'arrière-plan devient transparente lorsque l'image transparente est combinée avec Oreiller
Une histoire que j'ai eu du mal à afficher des graphiques les uns sur les autres avec matplotlib
[Introduction à StyleGAN] J'ai joué avec "The Life of a Man" ♬
Je veux sortir le début du mois prochain avec Python
Je souhaite rechercher le texte intégral avec elasticsearch + python
Je veux vérifier la position de mon visage avec OpenCV!
Je veux faire ○○ avec les Pandas
Je veux charger le projecteur pytest en tant que bibliothèque ailleurs (pytest peut ne pas exister dans l'environnement)
[Petite histoire] Comment enregistrer des graphiques matplotlib dans un lot avec Jupyter
Comprendre comment afficher des images sur Jupyter (utilisation de imshow / matplotlib d'OpenCV)
Je souhaite trier une liste dans l'ordre des autres listes
Je veux exprimer mes sentiments avec les paroles de Mr. Children
J'ai essayé avec les 100 meilleurs packages PyPI> J'ai essayé de représenter graphiquement les packages installés sur Python
Je souhaite arrêter la suppression automatique de la zone tmp dans RHEL7
Créez un environnement Python 3 avec pyenv sur Mac et affichez des graphiques Network X
Remarques sur ce qu'il faut faire lorsque l'effacement des ombres ne fonctionne pas avec scatter () / scatter3d () de matplotlib
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
Python: je souhaite mesurer proprement le temps de traitement d'une fonction
[Mots qui m'ont été épelés quand j'étais en première année ①] Je n'ai pas peur de créer un environnement de programmation.
Je suis un amateur le 14e jour de python, mais je veux essayer l'apprentissage automatique avec scicit-learn
Je voulais connaître le nombre de lignes dans plusieurs fichiers et j'ai essayé de l'obtenir avec une commande
Exemple de ce qu'il faut faire lorsque l'exemple de script ne fonctionne pas (OpenCV-Python)
Je souhaite visualiser l'état des transferts de la J League 2020, que dois-je faire?
One-liner qui crée un grand nombre de fichiers de test à la fois sous Linux
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
J'ai installé Pygame avec Python 3.5.1 dans l'environnement de pyenv sur OS X