Estoy ejecutando un script simple de Python en el servidor:
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)
Intento usar el comando python example.py
en este servidor que tiene instalado matplotlib 1.5.1, falla con el error:
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
¿Que está sucediendo aquí?
python
matplotlib
tkinter
usuario3654307
fuente
fuente
-X
?%matplotlib inline
Respuestas:
Matplotlib elige el backend de Xwindows por defecto. Debe configurar matplotlib para que no use el backend de Xwindows.
Agregue este código al comienzo de su script ( antes de importar pyplot ) e intente nuevamente:
O agregue a la
.config/matplotlib/matplotlibrc
líneabackend: Agg
para usar el backend no interactivo.O cuando se conecta al servidor, use el
ssh -X remoteMachine
comando para usar Xwindows.También puede tratar de pantalla de exportación:
export DISPLAY=mymachine.com:0.0
.Para más información: https://matplotlib.org/faq/howto_faq.html#matplotlib-in-a-web-application-server
fuente
matplotlib.use('Agg')
funciona para mí, ejecutándose dentro de una imagen de Docker.Puede resolverlo agregando estas dos líneas al COMIENZO de su script .py.
PD: El error seguirá existiendo si estas dos líneas no se agregan al comienzo del código fuente.
fuente
matplotlib
en la ventana acoplable (sin pantalla adjunta), pero ¿qué hace realmente?Para agregar la respuesta, usé esto al comienzo del script necesario. Por lo tanto, funciona sin problemas en diferentes entornos.
Porque no quería que siempre usara el
'Agg'
backend, solo cuando pasaría por Travis CI, por ejemplo.fuente
Tuve este mismo problema al intentar ejecutar una aplicación tkinter simple de forma remota en una Raspberry Pi. En mi caso, quería mostrar la GUI de tkinter en la pantalla pi, pero quiero poder ejecutarla a través de SSH desde mi máquina host. Tampoco estaba usando matplotlib, así que esa no fue la causa de mi problema. Pude resolver el problema estableciendo la variable de entorno DISPLAY como sugiere el error con el comando:
Una buena explicación de lo que está haciendo la variable de entorno de visualización y por qué la sintaxis es tan extraña se puede encontrar aquí: /ubuntu/432255/what-is-display-environment-variable
fuente
Otra solución es instalar Xvfb y exportarle su pantalla. es decir:
Luego
$ export DISPLAY =: 8
$ ./example.py
fuente
También encontré este problema mientras usaba Xshell para conectar el servidor Linux.
Después de buscar métodos, encuentro Xming + Xshell para resolver el problema de imagen imshow con matplotlib.
Si las soluciones anteriores no pueden resolver su problema, solo intente descargar Xming bajo la condición de que esté usando Xshell. Luego configure el atributo en Xshell, SSH-> tunnel-> X11transfer-> elija X DISPLAY localhost: 0.0
fuente
Para ver imágenes, diagramas y cualquier cosa que se muestre en las ventanas de su máquina remota, debe conectarse de esta manera:
De esa manera habilita el acceso al servidor X. El servidor X es un programa en el sistema X Window que se ejecuta en máquinas locales (es decir, las computadoras utilizadas directamente por los usuarios) y maneja todo el acceso a las tarjetas gráficas, pantallas de visualización y dispositivos de entrada (generalmente un teclado y mouse) en esas computadoras .
Más información aquí .
fuente