Ich führe ein einfaches Python-Skript auf dem Server aus:
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(60)
y = np.random.randn(60)
plt.scatter(x, y, s=20)
out_png = 'path/to/store/out_file.png'
plt.savefig(out_png, dpi=150)
Ich versuche, den Befehl python example.py
auf diesem Server zu verwenden, auf dem matplotlib 1.5.1 installiert ist. Er schlägt mit dem Fehler fehl:
Traceback (most recent call last):
File "example.py", line 7, in <module>
plt.scatter(x, y, s=20)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 3241, in scatter
ax = gca()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 928, in gca
return gcf().gca(**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 578, in gcf
return figure()
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/pyplot.py", line 527, in figure
**kwargs)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 84, in new_figure_manager
return new_figure_manager_given_figure(num, figure)
File "/home/USER/.virtualenvs/nnet/lib/python2.7/site-packages/matplotlib/backends/backend_tkagg.py", line 92, in new_figure_manager_given_figure
window = Tk.Tk()
File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1810, in __init__
self.tk = _tkinter.create(screenName, baseName, className, interactive, wantobjects, useTk, sync, use)
_tkinter.TclError: no display name and no $DISPLAY environment variable
Was passiert hier?
python
matplotlib
tkinter
user3654307
quelle
quelle
-X
?%matplotlib inline
Antworten:
Matplotlib wählt standardmäßig das Xwindows-Backend. Sie müssen matplotlib so einstellen, dass das Xwindows-Backend nicht verwendet wird.
Fügen Sie diesen Code am Anfang Ihres Skripts hinzu ( bevor Sie pyplot importieren ) und versuchen Sie es erneut:
Oder zur
.config/matplotlib/matplotlibrc
Zeile hinzufügen,backend: Agg
um nicht interaktives Backend zu verwenden.Oder wenn Sie eine Verbindung zum Server herstellen, verwenden Sie den
ssh -X remoteMachine
Befehl, um Xwindows zu verwenden.Sie können auch versuchen, die Anzeige zu exportieren :
export DISPLAY=mymachine.com:0.0
.Für weitere Informationen: https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
quelle
matplotlib.use('Agg')
funktioniert für mich - läuft in einem Docker-Image.Sie können es lösen, indem Sie diese beiden Zeilen am SEHREN Anfang Ihres .py-Skripts hinzufügen .
PS: Der Fehler bleibt bestehen, wenn diese beiden Zeilen nicht ganz am Anfang des Quellcodes hinzugefügt werden.
quelle
matplotlib
auf Docker ausgeführt wurde (kein Display angebracht), aber was macht es eigentlich?Um die Antwort zusammenzufassen, habe ich diese am Anfang des benötigten Skripts verwendet. So läuft es reibungslos in verschiedenen Umgebungen.
Weil ich nicht wollte, dass es immer das
'Agg'
Backend benutzt, nur wenn es zum Beispiel über Travis CI geht.quelle
Ich hatte das gleiche Problem beim Versuch, eine einfache tkinter-App remote auf einem Raspberry Pi auszuführen. In meinem Fall wollte ich die tkinter-GUI auf dem pi-Display anzeigen, aber ich möchte sie über SSH von meinem Host-Computer ausführen können. Ich habe auch kein Matplotlib verwendet, daher war dies nicht die Ursache für mein Problem. Ich konnte das Problem beheben, indem ich die Umgebungsvariable DISPLAY so einstellte, wie es der Fehler mit dem folgenden Befehl vorschlägt:
Eine gute Erklärung, was die Anzeigeumgebungsvariable tut und warum die Syntax so seltsam ist, finden Sie hier: /ubuntu/432255/what-is-display-environment-variable
quelle
Eine andere Lösung besteht darin, Xvfb zu installieren und Ihre Anzeige dorthin zu exportieren. dh:
Dann
$ export DISPLAY =: 8
$ ./example.py
quelle
Ich habe dieses Problem auch bei der Verwendung von Xshell zum Verbinden des Linux-Servers festgestellt.
Nachdem ich nach Methoden gesucht habe, finde ich Xming + Xshell, um das Problem der Bildimshow mit matplotlib zu lösen.
Wenn die oben genannten Lösungen Ihr Problem nicht lösen können, versuchen Sie einfach, Xming unter der Bedingung herunterzuladen, dass Sie Xshell verwenden. Setzen Sie dann das Attribut in Xshell, SSH-> Tunnel-> X11transfer-> wählen Sie X DISPLAY localhost: 0.0
quelle
Um Bilder, Diagramme und alles zu sehen, was in Windows auf Ihrem Remote-Computer angezeigt wird, müssen Sie folgende Verbindung herstellen:
Auf diese Weise aktivieren Sie den Zugriff auf den X-Server. Der X-Server ist ein Programm im X Window System, das auf lokalen Computern (dh den Computern, die direkt von Benutzern verwendet werden) ausgeführt wird und den gesamten Zugriff auf die Grafikkarten, Anzeigebildschirme und Eingabegeräte (normalerweise Tastatur und Maus) auf diesen Computern übernimmt .
Mehr Infos hier .
quelle