Come salvare una figura in remoto con pylab? [duplicare]
-
11-10-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Sto cercando di generare una figura a un computer remoto con il comando pylab.savefig
.
Ma ho ottenuto tale errore:
Unable to access the X Display, is $DISPLAY set properly?
Come posso risparmiare la cifra correttamente?
Soluzione
Per impostazione predefinita, matplotlib userà qualcosa come il back-end TkAgg
. Questo richiede un server X in esecuzione.
Mentre si può semplicemente utilizzare X-forwarding, ci sarà un ritardo notevole, come tentativi matplotlib di connettersi con l'X-server remoto. Se non avete bisogno di interagire con la trama, è spesso più bello per velocizzare le cose, evitando una X-collegamento del tutto.
Se si vuole fare una trama senza bisogno di un server X a tutti, utilizzare il Agg
backend .
es. fare qualcosa di simile:
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')
Se si desidera che questo sia il comportamento predefinito, è possibile modificare le matplotlibrc il file per usare il backend Agg
per impostazione predefinita.
Altri suggerimenti
Prova a impostare la variabile DISPLAY sul valore appropriato.
Grafica attraverso la rete utilizzando lavoro X11 da parte del cliente (remoto) computer con una variabile di ambiente DISPLAY che dice dove tracciare la grafica. In genere sarebbe qualcosa di simile mydesktop.example.com:0.0 - poi, quando un programma X11 cerca di disegnare qualcosa, si ottiene sfrecciò attraverso la rete a mydesktop.example.com, che è la macchina che si sta seduti davanti (la X server) e fino si apre.
Ora, se la macchina di fronte a voi è Windows, allora avrete bisogno di ottenere un server X da qualche parte -. Cygwin / X11 o commerciali superare farà bene
È inoltre necessario assicurarsi che la sicurezza è gestita -. Cant basta scrivere a chiunque di schermo attraverso la rete
Come vi state collegando la macchina remota? Perché se si sta andando da una macchina Linux ad un altro sistema Linux con ssh allora la soluzione più semplice è probabilmente 'Usa ssh -X foo.example.com' per collegare -. Questo tubi la connessione X11 tramite un socket locale
Quindi, se ssh -X isnt la risposta, possiamo avere qualche informazione in più sui sistemi operativi coinvolti per favore?