Generieren von Matplotlib-Graphen ohne laufenden X-Server [duplicate]
Lesezeit: 3 Minuten
Jonathan Livni
Matplotlib scheint die Umgebungsvariable $DISPLAY zu benötigen, was einen laufenden X-Server bedeutet. Einige Webhosting-Dienste lassen keine laufende X-Server-Sitzung zu. Gibt es eine Möglichkeit, Diagramme mit Matplotlib ohne laufenden X-Server zu generieren?
[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
>>>
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')
Sie müssen auch nicht das Agg-Backend verwenden. Der pdf-, ps-, svg-, agg-, cairo- und gdk-Backends können alle ohne X-Server verwendet werden. Standardmäßig wird jedoch nur das Agg-Backend erstellt (glaube ich?), sodass die Wahrscheinlichkeit groß ist, dass die anderen Backends bei Ihrer speziellen Installation nicht aktiviert sind.
Alternativ können Sie einfach den Backend-Parameter in Ihrem festlegen .matplotlibrc Datei automatisch zu haben matplotlib.pyplot Verwenden Sie den angegebenen Renderer.
Es scheint mir verrückt zu sein, dass Sie Matplotlib zweimal importieren müssen. Gibt es einen einfacheren Weg?
– tommy.carstensen
5. Juli 15 um 20:34 Uhr
Für das, was es wert ist, importieren Sie matplotlib nicht zweimal. Sie importieren matplotlib und importieren dann ein Untermodul, das nicht automatisch importiert wird. Es gibt andere Möglichkeiten, ja (z. B. ändern Sie Ihre .maplotlibrc Datei), dass dies die einfachste ist.
– Joe Kington
5. Juli 15 um 20:39 Uhr
Was ist, wenn ich Pyplot bereits importiert habe? kann ich es noch machen?
– Ciprian Tomoiagă
18. Dezember 16 um 19:59 Uhr
Es hieß “matplotlib.use() muss aufgerufen werden Vor pylab, matplotlib.pyplot oder matplotlib.backends wird zum ersten Mal importiert.”
– xb.
22. September 17 um 15:20 Uhr
Die meisten von Ihnen erwähnten Backends (insbesondere: pdf, ps, svg, agg) sind Nicht-GUI-Backends, sodass sie es nicht erlauben, die Handlung direkt aus dem Code anzuzeigen.
– Erel Segal-Halevi
10. Mai 20 um 8:39 Uhr
Sie müssen die Matplotlib-API direkt verwenden, anstatt die Pylab-Schnittstelle zu durchlaufen. Hier ist ein gutes Beispiel:
Ich arbeite mit ssh und screen und neben dem matplotlib.use('Agg')Vorschlag, dies war die einzige Lösung, die funktioniert hat. Danke für den Beitrag
– Benutzer3085931
7. Juli 16 um 9:25 Uhr
@ user3085931: Schön zu wissen, dass meine Antwort 5 Jahre, nachdem ich sie geschrieben habe, immer noch für jemanden nützlich ist! Danke für die Information.
– Neil Wass
15. Juli 16 um 8:01 Uhr
.
5698200cookie-checkGenerieren von Matplotlib-Graphen ohne laufenden X-Server [duplicate]yes