Generieren eines PNG mit matplotlib ist die ANZEIGE undefiniert
Ich versuche, mit networkx in Python. Wenn ich dieses Programm ausführen es diese Fehlermeldung erhalten. Ist es etwas, was fehlt?
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
Traceback (most recent call last):
File "graph.py", line 13, in <module>
nx.draw(G)
File "/usr/lib/pymodules/python2.5/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Bekomme ich eine andere Fehlermeldung jetzt:
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Bekomme ich eine andere Fehlermeldung jetzt:
#!/usr/bin/env python
import networkx as nx
import matplotlib
import matplotlib.pyplot
import matplotlib.pyplot as plt
matplotlib.use('Agg')
G=nx.Graph()
G.add_node(1)
G.add_nodes_from([2,3,4,5,6,7,8,9,10])
#nx.draw_graphviz(G)
#nx_write_dot(G, 'node.png')
nx.draw(G)
plt.savefig("/var/www/node.png")
/usr/lib/pymodules/python2.5/matplotlib/__init__.py:835: UserWarning: This call to matplotlib.use() has no effect
because the the backend has already been chosen;
matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.
if warn: warnings.warn(_use_error_msg)
Traceback (most recent call last):
File "graph.py", line 15, in <module>
nx.draw(G)
File "/usr/lib/python2.5/site-packages/networkx-1.2.dev-py2.5.egg/networkx/drawing/nx_pylab.py", line 124, in draw
cf=pylab.gcf()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 276, in gcf
return figure()
File "/usr/lib/pymodules/python2.5/matplotlib/pyplot.py", line 254, in figure
**kwargs)
File "/usr/lib/pymodules/python2.5/matplotlib/backends/backend_tkagg.py", line 90, in new_figure_manager
window = Tk.Tk()
File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1650, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
möglich, Duplikat der Generierung von matplotlib Graphen ohne Laufenden X-server
Bewegen Sie den Aufruf von matplotlib.benutzen Sie('Agg') über Ihre sonstigen Einfuhren, insbesondere sollte es vor dem import von matplotlib.pyplot
Danke! Das behandelt mein problem.
Kommentar löste es auch für mich: Das einzige, was irreführend ist "über Ihre anderen Einfuhren". Es sollte offensichtlich sein, dass Sie für den import von matplotlib vor... Das ist die ganze Einstellung, die für mich gearbeitet: import matplotlib // matplotlib.benutzen Sie('Agg') // import matplotlib.pyplot as plt
Bewegen Sie den Aufruf von matplotlib.benutzen Sie('Agg') über Ihre sonstigen Einfuhren, insbesondere sollte es vor dem import von matplotlib.pyplot
Danke! Das behandelt mein problem.
Kommentar löste es auch für mich: Das einzige, was irreführend ist "über Ihre anderen Einfuhren". Es sollte offensichtlich sein, dass Sie für den import von matplotlib vor... Das ist die ganze Einstellung, die für mich gearbeitet: import matplotlib // matplotlib.benutzen Sie('Agg') // import matplotlib.pyplot as plt
InformationsquelleAutor krisdigitx | 2010-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das Hauptproblem ist, dass (auf Ihrem system) matplotlib wählt eine x-mit-backend standardmäßig. Ich hatte gerade das gleiche problem auf einem meiner Server. Die Lösung für mich war, fügen Sie den folgenden code in einem Ort, der bekommt zu Lesen vor andere pylab/matplotlib/pyplot import:
Die alternative ist, um es in Ihr .matplotlibrc
.use
angeben backend.Wichtiger Hinweis: .verwenden muss aufgerufen werden, bevor pyplot importiert wird. Wenn Sie also beispielsweise nur versuchen, den import pyplot, müssen Sie den import matplotlib ersten Aufruf verwenden, und als import pyplot.
Oben im Kommentar erläutert die mehr durch die die Antwort.
backend: agg
im~/.config/matplotlib'/matplotlibrc
(als Beispiel hier: http://matplotlib.org/faq/troubleshooting_faq.html#Festlager-matplotlib-config-dir). Siehe auch matplotlib.org/users/customizing.html, die eine Beispiel-config-Datei am Ende der Seite. Finden "agg" auf dieser Seite und Sie werden sehen, die config-option, die Sie brauchen.Für Referenz, hier der link, um die matplotlib-Dokumentation, die erklärt. (+1, Super Antwort, hat mir geholfen, perfekt!)
InformationsquelleAutor Reinout van Rees
Nur als Ergänzung von Reinout Antwort.
Die dauerhafte Weise zu lösen diese Art von problem zu Bearbeiten .matplotlibrc-Datei. Finden Sie über
Ändern Sie dann das backend in der Datei auf die
backend : Agg
. Das ist es.$MATPLOTLIBRC
um das Verzeichnis, wo Sie wollen, werfen Sie Ihre eigene matplotlibrc in.Ein bisschen übertrieben für ein problem wie dieses, aber ich denke, wenn die server arbeiten immer kopflos macht es Sinn, um eine Konfigurationsdatei zu ändern. Würde das irgendwelche Nebenwirkungen auf, wie matplotlib wird funktionieren?
Ich bin mit matplotlib auf einem web-server, so dass dies die Antwort war für mich. Ich habe nicht bemerkt, keine Nebenwirkungen.
InformationsquelleAutor Chris.Q
Die saubere Antwort darauf ist, nehmen ein wenig Zeit, richtig zu bereiten Sie Ihre Ausführungsumgebung.
Die erste Technik, die Sie zum vorbereiten Ihrer Umgebung, die zur Ausführung ist die Verwendung eines
matplotlibrc
Datei, als klug empfohlen von Chris F., Einstellungin dieser Datei. Sie können sogar Steuern — ohne code-änderungen — wie und wo matplotlib sucht und findet die
matplotlibrc
- Datei.Die zweite Technik, die Sie zum vorbereiten Ihrer Umgebung, die zur Ausführung ist die Verwendung der
MPLBACKEND
environment variable (und informieren Sie Ihre Nutzer, es zu nutzen):Dies ist praktisch, denn man weiß nicht einmal, um eine andere Datei auf dem Datenträger zu dieser Arbeit. Ich beschäftigt diesen Ansatz, zum Beispiel sind Tests in continuous integration und Ausführung auf remote-Maschinen, die nicht zeigt.
Hart zu Kodieren matplotlib backend auf "Agg" in Ihrem Python-code wird wie bashing einen quadratischen Pflock in ein rundes Loch mit einem großen hammer, wenn, stattdessen konnte Sie gerade gesagt haben, matplotlib, die es braucht, um ein quadratisches Loch.
Mit MPLBACKEND es gelöst für mich. Definitiv der eleganteste Weg!
InformationsquelleAutor gotgenes
Bekam ich den Fehler bei der Verwendung von matplotlib durch Funken.
matplotlib.use('Agg')
bei mir nicht funktioniert. Am Ende, der folgende code funktioniert für mich. Mehr hierDies funktioniert gut, ohne die Einschränkungen auf die Reihenfolge der import matplotlib und anderen Bibliotheken.
Wenn unter Spark, hast du die Einschränkung dieses laufen auf dem head-Knoten, oder hast du diese arbeiten beim laufen auf worker-Knoten?
Ich bin mit diesem in einem django-Projekt und das war der einzige Weg, ich könnte es funktioniert.
ok, diese Arbeit für mich (python-3.6)
InformationsquelleAutor user3282611
Werde ich nur wiederholen, was @Ivo Bosticky sagte, die übersehen werden kann. Fügen Sie die folgenden Zeilen am SEHR start der py-Datei.
Oder man würde die Fehlermeldung
Diese die Lösung aller Problem bei der Anzeige
InformationsquelleAutor Somum
Anmeldung in den server, um den code auszuführen
verwenden Sie dieses anstatt:
den
-X
wird loszuwerden, die keine Namen und keine $DISPLAY-environment-variableFehler
🙂
dies ist die eine, die für mich gearbeitet.
Dieser Fehler für einen langen Prozess, wenn ssh mal aus, oder wenn Sie sich trennen müssen, aus welchem Grund auch immer. Beachten Sie, dass eine Zeitüberschreitung kann auch auftreten, wenn die Verbindung client geht in den Schlaf.
InformationsquelleAutor rajol kochlashvili
Ich fand das snippet gut zu funktionieren, beim Umschalten zwischen X und nicht-X-Umgebungen.
InformationsquelleAutor Matthias123
System, was sind Sie? Es sieht aus wie Sie ein system mit X11, aber die DISPLAY-Umgebungsvariable nicht richtig gesetzt. Versuchen Sie den folgenden Befehl ausführen und dann erneut ausführen Ihr Programm:
wenn Sie Remote verbunden sind, gar nicht die display-variable; verwenden Sie stattdessen den "XY" - flag, wenn Sie eine Verbindung herstellen. In, um sich zu zeigen, muss er wissen, welche Xserver senden Sie das Bild an; in diesem Fall wäre es die Anzeige von Ihrem computer, statt des remote-Computers. Mit der "XY" - flag dazu, dass SSH setzen der DISPLAY-variable automatisch auf die Anzeige der angeschlossenen computer.
Ich bin damit einverstanden, es ist sehr seltsam, dass es das tut; ich vermute aber, dass es Malt das Bild mithilfe von X11, und speichert dann das Ergebnis mit X11.
Verwenden Sie diese Einstellung für $DISPLAY funktioniert nicht auf EC2 mit Ubuntu-16 -- konnte keine Verbindung zum display "localhost:0"
InformationsquelleAutor Michael Aaron Safyan
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
Es funktioniert für mich.
InformationsquelleAutor Qing En
Eine andere Sache zu prüfen ist, ob der aktuelle Benutzer berechtigt ist, um eine Verbindung zu dem X-display angezeigt. In meinem Fall root nicht erlaubt war, das zu tun, und matplotlib war beschwert mit dem gleichen Fehler.
Quelle:
http://www.debian-administration.org/articles/494https://debian-administration.org/article/494/Getting_X11_forwarding_through_ssh_working_after_running_suInformationsquelleAutor Alex
Um sicherzustellen, dass Ihr code portabel zwischen Windows, Linux und OSX und für Systeme mit und ohne zeigt, würde ich vorschlagen, folgende snippet:
Credit: https://stackoverflow.com/a/45756291/207661
InformationsquelleAutor Shital Shah
Google Cloud Machine-Learning-Motor:
Und dann auf die Datei zu drucken:
und zum erstellen der PDF:
InformationsquelleAutor Kim Miller