I grafici sono visualizzabili anche su WSL utilizzando Visual Studio Code, che a partire dalla versione di giugno 2019 include un "Visualizzatore grafico".
In un normale file .py, inserendo una stringa di commento #%%
contrassegna il codice come cella Jupyter (IPython) e una lente di codice mostra le opzioni fino a Run Cell
. Inoltre, il clic destro all'interno di un file Python include l'opzione:
Esegui il file corrente nella finestra interattiva di Python
Dalla versione di giugno 2019 di VS Code:
L'aggiornamento di giugno 2019 includeva un nuovissimo Plot Viewer che può essere utilizzato per manipolare qualsiasi grafico di immagine, come i famosi grafici matplotlib.
Puoi provarlo facendo doppio clic sui grafici o facendo clic sul pulsante "espandi immagine" che viene visualizzato quando passi il mouse sopra le immagini dei grafici nella finestra interattiva di Python:
Con il visualizzatore di grafici, puoi eseguire una panoramica, ingrandire/ridurre, navigare tra i grafici nella sessione corrente ed esportare i grafici nei formati PDF, SVG o PNG.
Ok, quindi l'ho fatto funzionare come segue. Ho Ubuntu su Windows, con anaconda python 3.6 installato.
- Scarica e installa VcXsrv o Xming (X11 per Windows) da sourceforge (vedi modifica sotto)
sudo apt-get update
sudo apt-get install python3.6-tk
(potrebbe essere necessario installare unpython*-tk
diverso a seconda della versione di Python che stai utilizzando)pip install matplotlib
(per matplotlib. ma ora funzionano anche molte altre cose)export DISPLAY=localhost:0.0
(aggiungere a~/.bashrc
rendere permanente. vedi WSL2 sotto)
Ad ogni modo, dopo tutto questo, questo codice in esecuzione in Ubuntu su wsl ha funzionato così com'è:
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2*np.pi*t)
plt.plot(t, s)
plt.title('About as simple as it gets, folks')
plt.show()
risultato:
Forse è meglio farlo tramite un taccuino Jupyter o qualcosa del genere, ma è bello avere funzionalità di base di python matplotlib da riga di comando in Ubuntu per Windows su Subsystem for Linux, e questo fa funzionare anche molte altre app gui.
Ad esempio, puoi installare xeyes e dirà di installare x11-apps e l'installazione che installerà GTK utilizzato da molte app della GUI. Ma il punto è che una volta che il tuo DISPLAY è impostato correttamente e il tuo server x su Windows, allora la maggior parte delle cose che funzionerebbero su Ubuntu nativo funzioneranno per il WSL.
Modifica 04-09-2019 :Oggi ho riscontrato problemi con "impossibile ottenere le risorse dello schermo" dopo aver aggiornato alcune librerie. Quindi ho installato VcXsrv e l'ho usato al posto di Xming. Basta installare da https://sourceforge.net/projects/vcxsrv/ ed eseguire xlaunch.exe, selezionare più finestre, il prossimo il prossimo il prossimo ok. Poi tutto ha funzionato.
Modifica per utenti WSL 2 23-06-2020 WSL2 (attualmente insider fast ring) ha il supporto GPU/docker quindi vale la pena aggiornarlo. Tuttavia funziona in vm. Per WSL 2, segui gli stessi passaggi 1-4 quindi:
- l'ip non è localhost. è in resolv.conf quindi esegui invece questo (e includilo in ~/.bashrc):
export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0
- Ora ricontrolla il firewall:Sicurezza di Windows -> Firewall e protezione di rete -> Consenti a un'app di passare attraverso il firewall -> assicurati che VcXsrv abbia sia pubblico che privato selezionato. (Quando avvii xlaunch per la prima volta, potresti ricevere una richiesta per consentire il passaggio attraverso il firewall. Anche questo funziona. Inoltre, se VcXsrv non è nell'elenco delle app, puoi aggiungerlo manualmente, ad esempio da 'C:\program files\vcxsrv\vcxsrv .exe')
- Avvia VcXsrv con l'opzione "Disabilita controllo accessi" selezionata
Nota:alcuni utenti WSL2 hanno ricevuto un errore come couldn't connect to display "172.x.x.x:0"
. In tal caso, prova a controllare l'indirizzo IP memorizzato in DISPLAY con questo comando:echo $DISPLAY
. Se l'IP visualizzato sembra essere errato (ad es. "8.8.8.8" o un altro indirizzo IP non funzionante) è necessario modificare il codice in ~/.bashrc
mostrato nel punto 5 a qualcosa che otterrà l'indirizzo IP della tua istanza. Un utente ha detto che ha funzionato:export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
. Tuttavia per alcuni altri non ha funzionato. YMMV, ma trova il tuo IP e usa if per DISPLAY. Per la maggior parte degli utenti WSL2, il comando in #5 funziona.
Modifica per Windows 11 :se MS ti ha convinto a buttare via il tuo vecchio computer e acquistarne uno con un TPM e quindi hai Windows 11, ottieni la GUI gratuitamente. Spero che aggiungano il percorso di aggiornamento per farlo su Windows 10 perché Win10 sarà come XP e durerà a lungo da quando MS ha deciso che hai bisogno di un computer recente anche se Win11 funzionerebbe bene sui vecchi computer.
Per WSL2 utilizzando la versione Ubuntu Focal Fossa, ho scaricato e installato VcXsrv Su Windows. Uso questa configurazione:
Non so per Native OpenGL ma sembra importante disabilitare il controllo degli accessi.
Ora devi esportare la variabile env DISPLAY
in WSL.
Ho trovato l'indirizzo corretto in /etc/resolv.conf
, ma quello trovato nel ifconfig
risultato non lo è. Quindi il seguente comando non funziona per me:
export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
L'indirizzo IP può essere trovato anche nel comando ipconfig
in CMD.exe
contesto di comando. Cerca vEthernet (WSL)
, dovrebbe essere quello.
Ora puoi verificare che tutto funzioni semplicemente eseguendo xcalc nel tuo ambiente WSL. Se xcalc non è presente, installalo:
sudo apt-get update && sudo apt-get install x11-apps
Il comando xcalc dovrebbe aprire un'applicazione simile a questa su Windows:
Se funziona, significa che la connessione al tuo X-server è possibile ma potresti dover installare qualche pacchetto extra per Python come:
sudo apt-get install python3.x-tk
Cambia .x
in base alla tua versione di Python.
Per far funzionare matplotlib con GTKAgg su Bash su Ubuntu su Windows , io:
- installato VcXsrv sotto Windows (ma le cose dovrebbero funzionare allo stesso modo con Xming)
- imposta DISPLAY come indicato sopra [
export DISPLAY=localhost:0.0
(aggiungi a ~/.bashrc per renderlo permanente)] - ha eseguito
sudo pip uninstall matplotlib
- seguito da
sudo apt install python-matplotlib
- matplotlibrc aggiornato per leggere
backend : GTKAgg
(invece dibackend : agg
) - Ho eseguito anche
sudo apt-get install python-gtk2-dev
, ma potrebbe non essere necessario.
Sembra necessario disinstallare matplotlib installato in pip e reinstallarlo tramite apt perché pip non include le estensioni C necessarie per eseguire GTK, ma la versione di apt sì.