Solución:
Ok, lo hice funcionar de la siguiente manera. Tengo Ubuntu en Windows, con anaconda python 3.6 instalado.
- Descargue e instale VcXsrv o Xming (X11 para Windows) desde sourceforge (consulte la edición a continuación)
sudo apt-get update
-
sudo apt-get install python3.6-tk
(puede que tenga que instalar otropython*-tk
dependiendo de la versión de Python que esté usando) -
pip install matplotlib
(para matplotlib. pero muchas otras cosas ahora también funcionan) -
export DISPLAY=localhost:0.0
(añadir~/.bashrc
para hacer permanente. ver WSL2 debajo)
De todos modos, después de todo eso, este código que se ejecuta en ubuntu en wsl funcionó como está:
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()
resultado:
Tal vez esto se haga mejor a través de un cuaderno Jupyter o algo así, pero es bueno tener la funcionalidad básica de línea de comandos python matplotlib en Ubuntu para Windows en Subsystem para Linux, y esto hace que muchas otras aplicaciones de interfaz gráfica de usuario también funcionen.
Por ejemplo, puede instalar xeyes, y le dirá que instale las aplicaciones x11 y que instale eso instalará GTK que usan muchas aplicaciones GUI. Pero el punto es que una vez que tenga su DISPLAY configurado correctamente y su servidor x en Windows, entonces la mayoría de las cosas que funcionarían en un ubuntu nativo funcionarán para WSL.
Editar 2019-09-04 : Hoy tuve problemas con ‘no puedo obtener recursos de pantalla’ después de actualizar algunas bibliotecas. Así que instalé VcXsrv y lo usé en lugar de Xming. Simplemente instale desde https://sourceforge.net/projects/vcxsrv/ y ejecute xlaunch.exe, seleccione varias ventanas, siguiente siguiente siguiente ok. Entonces todo funcionó.
Editar para usuarios de WSL 2 2020-06-23
WSL2 (actualmente insider fast ring) tiene soporte GPU / docker, por lo que vale la pena actualizarlo. Sin embargo, se ejecuta en vm. Para WSL 2, siga los mismos pasos 1-4 y luego:
- la ip no es localhost. está en resolv.conf así que ejecuta esto en su lugar (e inclúyelo en ~ / .bashrc):
export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0
- Ahora verifique dos veces el firewall: Seguridad de Windows -> Firewall y protección de red -> Permitir una aplicación a través del firewall -> asegúrese de que VcXsrv haya marcado tanto público como privado. (Cuando inicie xlaunch por primera vez, es posible que reciba un mensaje para permitir el paso del firewall. Esto también funciona. Además, si VcXsrv no está en la lista de aplicaciones, puede agregarlo manualmente, por ejemplo, desde ‘C: program files vcxsrv vcxsrv .exe’)
- Inicie VcXsrv con “Deshabilitar control de acceso” marcado
Nota: algunos usuarios de WSL2 obtuvieron un error como couldn't connect to display "172.x.x.x:0"
. Si eso es, intente verificar la dirección IP almacenada en DISPLAY con este comando: echo $DISPLAY
. Si la IP mostrada parece ser incorrecta (es decir, “8.8.8.8” u otra dirección IP que no funciona), debe cambiar el código en ~/.bashrc
mostrado en el punto 5 a algo que obtendrá la dirección IP de su instancia. Un usuario dijo que esto funcionó: export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}')
. Sin embargo, para algunos otros no funcionó. YMMV, pero solo encuentra tu IP y úsala para DISPLAY. Para la mayoría de los usuarios de WSL2, el comando en # 5 funciona.
Para que matplotlib funcione con GTKAgg en Bash en Ubuntu en Windows, I:
- instalado VcXsrv en Windows (pero las cosas deberían funcionar igual con Xming)
- configure DISPLAY como se indica arriba [
export DISPLAY=localhost:0.0
(add to ~/.bashrc to make permanent)] - ejecutado
sudo pip uninstall matplotlib
- seguido por
sudo apt install python-matplotlib
- matplotlibrc actualizado para leer
backend : GTKAgg
(en vez debackend : agg
) - Yo también corrí
sudo apt-get install python-gtk2-dev
, pero esto puede no ser necesario.
Desinstalar el matplotlib instalado por pip y reinstalarlo a través de apt parece ser necesario porque pip no incluye las extensiones C necesarias para ejecutar GTK, pero la versión de apt sí.
Los gráficos también se pueden ver en WSL mediante Visual Studio Code, que a partir de la versión de junio de 2019 incluye un “Visor de gráficos”.
En un archivo .py normal, insertando una cadena de comentario #%%
marca el código como una celda de Jupyter (IPython) y una lente de código muestra opciones para Run Cell
. Además, hacer clic con el botón derecho dentro de un archivo Python incluye la opción:
Ejecutar el archivo actual en la ventana interactiva de Python
De la versión de junio de 2019 de VS Code:
La actualización de junio de 2019 incluyó un visor de gráficos completamente nuevo que se puede usar para manipular cualquier gráfico de imagen, como los populares gráficos matplotlib.
Puede probarlo haciendo doble clic en los gráficos o haciendo clic en el botón “expandir imagen” que se muestra cuando pasa el cursor sobre las imágenes del gráfico en la ventana interactiva de Python:
Con el visor de gráficos, puede desplazarse, acercar / alejar, navegar por los gráficos en la sesión actual y exportar los gráficos a formatos PDF, SVG o PNG.