Matplotlib semble nécessiter la variable d'environnement $ DISPLAY, qui signifie un serveur X en cours d'exécution.
Certains services d'hébergement Web n'autorisent pas l'exécution d'une session de serveur X.
Y at-il un moyen de générer des graphiques en utilisant matplotlib sans un serveur X en cours d’exécution?
[username@hostname ~]$ python2.6
Python 2.6.5 (r265:79063, Nov 23 2010, 02:02:03)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib.pyplot as plt
>>> fig = plt.figure()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.Egg/matplotlib/pyplot.py", line 270, in figure
**kwargs)
File "/home/username/lib/python2.6/matplotlib-1.0.1-py2.6-linux-i686.Egg/matplotlib/backends/backend_tkagg.py", line 80, in new_figure_manager
window = Tk.Tk()
File "/usr/local/lib/python2.6/lib-tk/Tkinter.py", line 1643, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
>>>
La réponse de @ Neil est un moyen (parfaitement valide!) De le faire, mais vous pouvez aussi simplement appeler matplotlib.use('Agg')
avant l'importation _matplotlib.pyplot
_ , puis continuez normalement.
Par exemple.
_import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
fig.savefig('temp.png')
_
Vous n'avez pas non plus besoin d'utiliser le backend Agg. Les backends pdf, ps, svg, agg, cairo et gdk peuvent tous être utilisés sans serveur X. Cependant, seul le backend Agg sera construit par défaut (je pense?), Il y a donc de bonnes chances que les autres backends ne soient pas activés sur votre installation particulière.
Alternativement, vous pouvez simplement définir le paramètre backend dans votre fichier .matplotlibrc
afin que _matplotlib.pyplot
_ utilise automatiquement le rendu donné.
Vous devez utiliser l'API matplotlib directement plutôt que de passer par l'interface pylab. Il y a un bon exemple ici:
http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html