Generieren von Matplotlib-Graphen ohne laufenden X-Server [duplicate]

Lesezeit: 3 Minuten

Generieren von Matplotlib Graphen ohne laufenden X Server duplicate
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
>>>

1642731366 975 Generieren von Matplotlib Graphen ohne laufenden X Server duplicate
Joe Kington

@ Neils Antwort ist eine (vollkommen gültige!) Möglichkeit, dies zu tun, aber Sie können dies auch tun einfach anrufen matplotlib.use('Agg') Vor importieren matplotlib.pyplot, und fahren Sie dann wie gewohnt fort.

Z.B

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:

http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html

  • 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

.

569820cookie-checkGenerieren von Matplotlib-Graphen ohne laufenden X-Server [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy