Na serwerze uruchamiam prosty skrypt Pythona:
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)
Próbuję użyć polecenia python example.py
na tym serwerze, na którym jest zainstalowany program Matplotlib 1.5.1. Błąd:
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
Co tu się dzieje?
python
matplotlib
tkinter
użytkownik3654307
źródło
źródło
-X
?%matplotlib inline
Odpowiedzi:
Matplotlib domyślnie wybiera backend Xwindows. Musisz ustawić matplotlib, aby nie korzystał z backendu Xwindows.
Dodaj ten kod na początku skryptu ( przed zaimportowaniem pyplot ) i spróbuj ponownie:
Lub dodaj do
.config/matplotlib/matplotlibrc
linii,backend: Agg
aby użyć nieinteraktywnego zaplecza.Lub po podłączeniu do serwera użyj
ssh -X remoteMachine
polecenia, aby użyć Xwindows.Również można spróbować wyświetlaczu wywozowych:
export DISPLAY=mymachine.com:0.0
.Aby uzyskać więcej informacji: https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
źródło
matplotlib.use('Agg')
działa dla mnie - działa wewnątrz obrazu Docker.Możesz to rozwiązać, dodając te dwa wiersze na BARDZO początku skryptu .py.
PS: Błąd będzie nadal występował, jeśli te dwa wiersze nie zostaną dodane na samym początku kodu źródłowego.
źródło
matplotlib
na oknie dokowanym (bez dołączonego wyświetlacza), ale co to właściwie robi?Aby dodać odpowiedź, użyłem tego na początku potrzebnego skryptu. Dzięki temu działa płynnie w różnych środowiskach.
Ponieważ nie chciałem, aby zawsze był za pomocą
'Agg'
backendu, tylko wtedy, gdy przejdzie na przykład przez Travis CI.źródło
Miałem ten sam problem, próbując uruchomić prostą aplikację tkinter zdalnie na Raspberry Pi. W moim przypadku chciałem wyświetlić GUI tkinter na ekranie pi, ale chcę móc go uruchomić przez SSH z mojego komputera. Nie korzystałem też z Matplotliba, więc to nie był przyczyną mojego problemu. Udało mi się rozwiązać problem, ustawiając zmienną środowiskową DISPLAY, jak sugeruje błąd w poleceniu:
Dobre wyjaśnienie tego, co robi zmienna środowiskowa wyświetlania i dlaczego tak dziwna jest składnia, można znaleźć tutaj: /ubuntu/432255/what-is-display-environment-variable
źródło
Innym rozwiązaniem jest zainstalowanie Xvfb i wyeksportowanie do niego wyświetlacza. to znaczy:
Następnie
WYŚWIETLACZ $ eksport =: 8
$ ./example.py
źródło
Spotkałem również ten problem podczas używania Xshell do łączenia się z serwerem Linux.
Po szukaniu metod znajduję Xming + Xshell, aby rozwiązać problem z wyświetlaniem obrazu za pomocą matplotlib.
Jeśli powyższe rozwiązania nie mogą rozwiązać Twojego problemu, po prostu spróbuj pobrać Xming pod warunkiem, że używasz Xshell. Następnie ustaw atrybut w Xshell, SSH-> tunel-> X11transfer-> wybierz X WYŚWIETL lokalny host: 0.0
źródło
Aby zobaczyć obrazy, wykresy i wszystko wyświetlane w oknach na zdalnym komputerze, musisz się z nim połączyć w następujący sposób:
W ten sposób włączasz dostęp do serwera X. X server to program w systemie X Window, który działa na lokalnych komputerach (tj. Komputerach używanych bezpośrednio przez użytkowników) i obsługuje cały dostęp do kart graficznych, ekranów wyświetlacza i urządzeń wejściowych (zazwyczaj klawiatury i myszy) na tych komputerach .
Więcej informacji tutaj .
źródło