71 votes

Comment enregistrer une figure à distance avec pylab ?

J'essaie de générer une figure sur un ordinateur distant avec la commande pylab.savefig . Mais j'ai eu cette erreur :

Unable to access the X Display, is $DISPLAY set properly?

Comment puis-je sauvegarder la figure correctement ?

141voto

Joe Kington Points 68089

Par défaut, matplotlib utilisera quelque chose comme l'interface suivante TkAgg backend. Cela nécessite l'exécution d'un serveur X.

Bien que vous puissiez simplement utiliser la redirection X, il y aura un décalage notable lorsque matplotlib essaiera de se connecter avec le serveur X distant. Si vous n'avez pas besoin d'interagir avec le tracé, il est souvent plus agréable d'accélérer les choses en évitant complètement une connexion X.

Si vous souhaitez réaliser un tracé sans avoir besoin d'un serveur X, utilisez la commande Agg backend à la place.

Par exemple, faites quelque chose comme ça :

import matplotlib
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab!
import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png')

Si vous souhaitez que ce soit le comportement par défaut, vous pouvez modifier votre fichier fichier matplotlibrc pour utiliser le Agg par défaut.

Voir cet article pour plus d'informations .

1voto

Spacedman Points 33792

Umm, définir correctement la variable DISPLAY ?

Les graphiques sur le réseau utilisant X11 fonctionnent grâce à la variable d'environnement DISPLAY de l'ordinateur client (distant) qui indique où dessiner les graphiques. Typiquement, c'est quelque chose comme mydesktop.example.com:0.0 - alors quand un programme X11 essaie de dessiner quelque chose, il est envoyé par le réseau vers mydesktop.example.com, qui est la machine devant laquelle vous êtes assis (le serveur X) et il apparaît.

Maintenant, si la machine en face de vous est sous Windows, alors vous devrez obtenir un serveur X de quelque part - cygwin/X11 ou eXceed commercial feront très bien l'affaire.

Vous devez également vous assurer que la sécurité est prise en charge - vous ne pouvez pas laisser n'importe qui écrire sur votre écran via le réseau.

Comment vous connectez-vous à la machine distante ? Parce que si vous vous connectez d'une machine Linux à une autre machine Linux avec ssh, la solution la plus simple est probablement d'utiliser ssh -X foo.example.com pour vous connecter - cela fait passer la connexion X11 par un socket local.

Donc, si ssh -X n'est pas la réponse, pouvons-nous avoir plus d'informations sur les systèmes d'exploitation concernés ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X