[PYTHON] Conseils de dessin avec matplotlib côté serveur

Dans de nombreux cas, le calcul est exécuté à distance dans le travail de "calcul, tracé et confirmation du résultat". Les options qui viennent à l'esprit pour ce flux de travail sont:

  1. Enregistrez les données de sortie (journal) du résultat du calcul dans un fichier. (Il peut être basé sur du texte ou sérialisé.) Transférez-le vers le client, dessinez-le et vérifiez-le avec un autre programme.
  2. Utilisez Jupyter Notebook. Exécutez le service Jupyter Notebook sur le serveur, connectez-vous au navigateur Web à partir du client et, bien sûr, vérifiez la figure sur le navigateur.
  3. Connectez-vous au serveur et au bureau distant pour effectuer une série d'opérations.
  4. Dessinez et sortez le fichier de figure côté serveur. Affichez les fichiers image tels que PNG et PDF sur le PC client.

Dans le passé, les options 1 et 2 étaient souvent sélectionnées, mais cette fois, j'aimerais vous présenter des astuces sur le dessin côté serveur de ** l'option 4 **.

Premier échec

Quand j'ai dit: "Il y avait un savefig () dans matplotlib.pylot."

Traceback 
...(Omis)
RuntimeError: Invalid DISPLAY variable

Une erreur se produira comme dans. Ceci est probablement dû au fait que l'AFFICHAGE qui est la destination d'affichage n'est pas défini. Vous pouvez prendre des mesures en recherchant sur le net et en spécifiant le backend de matplotlib.

import numpy as np
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from matplotlib import cm

def sphere_func(x, y):
    z = x * x + y * y
    
    return z

def contr3d1():
    ndiv = 200
    xp = np.linspace(-4., 4., ndiv)
    yp = np.linspace(-4., 4., ndiv)
    
    xx, yy = np.meshgrid(xp, yp, sparse=True)
    
    zp = sphere_func(xx, yy)
    
    fig = plt.figure()
    ax = fig.gca(projection='3d')
    ax.plot_surface(xx, yy, zp, 
        rstride=6, cstride=6, alpha=0.7, cmap=cm.rainbow)
    ax.set_zlim(-1.0, 40.)
    
    # plt.show()
    
    fig.savefig('sphere_3d.png')

if __name__ == '__main__':
    contr3d1()

Au début du programme, là où le module est importé, matplotlib spécifie d'utiliser AGG (moteur Anti-Grain Geometry).

import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt

Le but est de mettre cette instruction mpl.use ('Agg') avant d'importer matplotlib.pyplot. Maintenant, savefig () fonctionne normalement.

Spécifiez les backends de matplotlib

Cette fois, j'ai spécifié 'AGG', mais d'après le document matplotlib, il semble que plusieurs types puissent être utilisés pour ce backends.

** Backends non interactifs (cités de la documentation matplotlib) **

Renderere Filetypes Description
AGG png raster grapahics - high quality images using the Anti-Grain Geometry engine
PS ps eps vector graphics - Postscript output
PDS pdf vector graphics - Portable Document Format
SVG svg vector graphics - Scalable Vector Graphics
Cairo png ps pdf svg ... vector graphics - Cairo graphics
GDK png jpg tiff ... raster graphics - the Gimp Drawing Kit

J'ai essayé de spécifier'SVG 'et de l'exécuter, mais le fichier SVG était sorti normalement.

(L'environnement de programmation est OS Ubuntu-14.04 LTS, Python 2.7.11, Anaconda 2.4.1 avec une série de bibliothèques (numpy, matplotlib, etc.).)

Fonction d'affichage graphique Visual Studio Code inattendue

Le fichier graphique a été généré avec succès. Vous pouvez utiliser n'importe quel outil d'affichage graphique que vous aimez, mais ici, nous vous recommandons Visual Studio Code. Comme vous le savez, Visual Studio Code est un éditeur de texte, il gère donc principalement le texte, mais vous pouvez l'ouvrir dans les unités de dossier et vous pouvez travailler tout en changeant activement de fichiers. Par hasard, lorsque j'ai spécifié (touché) un fichier image (png), l'image était affichée, et j'ai pu remarquer cette fonction.

(Le fichier est partagé par le service serveur (smb). Le dossier serveur est ouvert par Visual Studio Code côté client (Windows).)

** Fig. Visual Studio Code (affiche le code normalement) ** matplotlib_snap1.png

** Fig. Visual Studio Code (afficher le fichier image (png)) ** matplotlib_snap2.png Vous pouvez voir le fichier image (png).

** Fig. Visual Studio Code (Afficher le fichier SVG) (Bonus) ** matplotlib_snap3.png Je me suis demandé s'il serait rendu, mais SVG était du texte.

De cette façon, c'est très pratique car vous pouvez vérifier la figure sans quitter le travail de l'éditeur de texte.

Pourquoi l'éditeur prend-il en charge la fonction d'affichage d'image? J'étais un peu sceptique, mais j'imagine qu'il était nécessaire d'ajouter une fonction d'affichage d'image lors de l'ajout de la fonction de prévisualisation pour l'édition Markdown.

(Visual Studio Code a utilisé la version 0.10.8.)

Références (site Web)

--Comment éviter la récurrence du problème que matplotlib est de la mousse lorsque $ DISPLAY n'est pas défini --Qiita http://qiita.com/nishio/items/0a8949262d86c181668b

Recommended Posts

Conseils de dessin avec matplotlib côté serveur
Remarques sur l'utilisation de matplotlib sur le serveur
Obtenez la largeur du div côté serveur avec Selenium + PhantomJS + Python
Dessin en temps réel avec matplotlib
(Pour ceux qui ne connaissent pas Matplotlib) Conseils pour dessiner des graphiques avec Seaborn
Méthode de dessin graphique avec matplotlib
Mémo pour obtenir la valeur côté html-javascript avec jupyter
Accédez au serveur SQL de l'hôte avec python27 / pyodbc sur le conteneur
Optimisation d'image côté serveur à l'aide de l'API Web de TinyPNG
Dessinez le japonais avec matplotlib sur Ubuntu
Collez la figure matplotlib sur Excel
La synchronisation avec le serveur qui a porté ssh sur localhost échoue [Résolu]
Paramètres de démarrage du projet Dango sur le serveur avec Pycharm
[Python] Définissez la plage du graphique avec matplotlib
Espace var insuffisant sur le serveur de messagerie
Ajustez l'espacement entre les chiffres avec Matplotlib
Connectez-vous au VPN avec votre smartphone et éteignez / rallumez le serveur
Essayez de dessiner une distribution normale avec matplotlib
Ajouter un intervalle de confiance de 95% des deux côtés pour la figure avec Python / Matplotlib
Django + Apache avec mod_wsgi sur Windows Server 2016
Modifiez le fichier du serveur de destination de la connexion SSH sur le serveur avec VS Code
Ecrire des graphiques SVG avec matplotlib avec heroku
Télécharger des fichiers sur le Web avec Python
Définissez la couleur des xticklabels individuellement avec matplotlib
Afficher les marqueurs au-dessus de la bordure avec matplotlib
Alignez la barre de couleurs sur la figure avec matplotlib
Publier le répertoire actuel sur le serveur Web
Afficher les images ImageField normalement sur le serveur avec Django + Google Cloud Strage
Dessinez une ligne de pliage / diagramme de dispersion avec python matplotlib pour fichier CSV (2 colonnes)
Connectez-vous à un serveur distant avec SSH
Exécutez des tâches en arrière-plan sur le serveur sur lequel vous vous êtes connecté
Premiers pas avec le dessin avec matplotlib: écrire des fonctions simples
Augmentez la taille de la police du graphique avec matplotlib
Activer Jupyter Notebook avec conda sur un serveur distant
Introduction à Python avec Atom (en route)
La base de la théorie des graphes avec l'animation matplotlib
Dessin graphique avec jupyter (notebook ipython) + matplotlib + vagrant
Visualisez le comportement de l'algorithme de tri avec matplotlib
Monter le répertoire d'un autre serveur avec sshfs
Notebook Jupyter ouvert à distance lancé sur le serveur
J'ai essayé de jouer avec la calculatrice avec tkinter
Visualiser grib2 sur une carte avec python (matplotlib)
matplotlib: remplacez l'axe lui-même par un autre.
Incorporer d'autres images sur le raster avec ArcPy
[Python] Personnalisez la palette de couleurs lors du dessin de graphiques avec matplotlib
Une histoire sur un ingénieur venu uniquement du côté serveur a créé un portfolio
Mettez Scipy + Matplotlib dans Ubuntu sur Vagrant et affichez le graphique avec X11 Forwarding
[CGI] Exécutez le programme Python du serveur avec Vue.js + axios et obtenez les données de sortie
Animation avec matplotlib
J'ai essayé d'étudier côté serveur WEB lors d'une session d'étude Python en interne
Japonais avec matplotlib
Animation avec matplotlib
histogramme avec matplotlib
Faire une animation avec matplotlib
La manière la plus bâclée de prendre en charge CORS avec aiohttp Server
[CentOS 7.3] Créer un serveur FTP sur l'hôte ESXi
Ajoutez des informations au bas de la figure avec Matplotlib
Surveiller le modèle d'entraînement avec TensorBord sur Jupyter Notebook
Faire un point d'arrêt sur la couche c avec python