2011-01-16 9 views
54

Estoy tratando de generar una figura en una computadora remota con el comando pylab.savefig. Pero tengo dicho error:¿Cómo guardar una figura de forma remota con pylab?

Unable to access the X Display, is $DISPLAY set properly? 

¿Cómo puedo guardar la figura correctamente?

+1

Relacionados: http://stackoverflow.com/questions/2801882/generating-a-png-with-matplotlib-when-display-is-undefined?lq=1 –

Respuesta

113

De forma predeterminada, matplotlib usará algo como el backend TkAgg. Esto requiere que se ejecute un servidor X.

Si bien puede usar X-forwarding, habrá un retraso notable ya que matplotlib intenta conectarse con el servidor remoto X. Si no necesita interactuar con la trama, a menudo es más agradable acelerar las cosas evitando por completo una conexión X.

Si desea hacer un trazado sin necesitar un servidor X, utilice el Aggbackend.

E.g. hacer algo como esto:

import matplotlib 
matplotlib.use('Agg') # Must be before importing matplotlib.pyplot or pylab! 
import matplotlib.pyplot as plt 

fig = plt.figure() 
plt.plot(range(10)) 
fig.savefig('temp.png') 

Si quieres que este es el comportamiento por defecto, puede modificar su matplotlibrc file de usar el backend Agg por defecto.

Ver this article for more information.

+1

Tuve el mismo problema con Gerry. Para mí, el truco de Joe solo no es suficiente, también necesitaba hacer ssh -X nos @ server.com en lugar de solo ssh – nos

+0

Muchas gracias. Esta solución es más clara que cualquier otra solución ... – upendra

+0

Hola Joe, tengo un tipo de preguntas que trazo. Necesito consejos de expertos como usted, por favor eche un vistazo a http://stackoverflow.com/questions/36248016/how-to-get-more-information-in-2nd-plot-by-clicking-1st-plot-using-python -clicki –

1

Umm, configure la variable DISPLAY correctamente?

Gráficos a través de la red que utilizan el trabajo X11 de la computadora cliente (remota) que tiene una variable de entorno DISPLAY que indica dónde dibujar los gráficos. Normalmente sería algo así como mydesktop.example.com:0.0 - luego, cuando un programa X11 intenta dibujar algo, se pasa rápidamente a través de la red a mydesktop.example.com, que es la máquina en la que estás sentado (la X servidor) y hasta aparece.

Ahora, si la máquina que tienes delante es Windows, necesitarás obtener un servidor X de alguna parte, cygwin/X11 o comercial eXceed funcionará muy bien.

También debe asegurarse de que se maneja la seguridad; no puede hacer que nadie escriba en su pantalla a través de la red.

¿Cómo se conecta a la máquina remota? Porque si vas de una caja Linux a otra caja Linux con ssh entonces la solución simple es probablemente 'Usar ssh -X foo.example.com' para conectar - esto canaliza la conexión X11 sobre un socket local.

Entonces, si ssh -X no es la respuesta, ¿podemos obtener más información sobre los sistemas operativos implicados, por favor?

+0

Gracias por su explicación. Soy ssh una máquina de Linux en Windows. ¿Es posible hacer la figura sin X11? – gerry

+0

No para que aparezca en la pantalla: debe obtener pylab para escribirlo en un archivo y luego copiarlo en su cuadro de Windows. Tal vez dar http://winswitch.org/ a go - esa es una interfaz fácil para la diversión de gráficos de plataforma cruzada. – Spacedman

+0

Hice "ssh -X username @ servername" de mi linux box a otra caja de linux y funcionó –

Cuestiones relacionadas