Entonces, parece que en ubuntu para Windows (subsistema de Windows para Linux), la gente sugiere que necesitamos usar el backend Agg y simplemente guardar imágenes, no mostrar gráficos.
import matplotlib matplotlib.use('Agg') # no UI backend 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() plt.savefig("matplotlib.png") #savefig, don't show¿Cómo podríamos llegar a donde plt.show() realmente nos mostraría una imagen? Mi opción actual es anular plot.show() para, en cambio, simplemente savefig a plot-148123456.png en /mnt/c/Users/james/plots/ en Windows y simplemente tener una ventana del explorador abierta para ver las imágenes.
Supongo que podría alojar esa carpeta y usar un navegador.
Mi objetivo es poder ejecutar ejemplos simples como el código anterior sin cambiar el código para enviar las imágenes por ftp a algún lugar, etc. Solo quiero que la trama se muestre en una ventana.
¿Alguien ha encontrado una manera decente de hacerlo?
Para WSL2 con la versión Ubuntu Focal Fossa, descargué e instalé VcXsrv en Windows. Yo uso esta configuración:
No sé para Native OpenGL , pero parece importante deshabilitar el control de acceso.
Ahora, necesita exportar la variable env DISPLAY en WSL.
Encontré la dirección correcta en /etc/resolv.conf , pero la que se encuentra en el resultado de ifconfig no lo es. Así que el siguiente comando no funciona para mí:
export DISPLAY=$(ifconfig | grep inet | awk '{print $2}' | head -n 1 | awk '{print $0":0"}') Esa dirección IP también se puede encontrar en el comando ipconfig en el contexto del comando CMD.exe . Busque vEthernet (WSL) , ese debería ser el indicado.
Ahora, puede probar que todo funciona simplemente ejecutando xcalc en su entorno WSL. Si xcalc no está presente, instálelo:
sudo apt-get update && sudo apt-get install x11-appsEl comando xcalc debería abrir una aplicación con este aspecto en Windows:
Si funciona, eso significa que la conexión a su servidor X es posible, pero tal vez necesite instalar algún paquete adicional para Python como:
sudo apt-get install python3.x-tk Cambie .x según su versión de python.
Los gráficos también se pueden ver en WSL con 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, al insertar una cadena de comentarios #%% se 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 derecho dentro de un archivo de Python incluye la opción:
Ejecutar el archivo actual en la ventana interactiva de Python
La actualización de junio de 2019 incluyó un visor de gráficos completamente nuevo que se puede usar para manipular gráficos de cualquier imagen, como los populares gráficos de 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 mouse 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 gráficos a formatos PDF, SVG o PNG.
En mi caso (Windows 10, WSL2, Ubuntu 20.04 con miniconda3 y entorno virtual donde instalé todos los paquetes necesarios de Python 3.6 usando el comando conda , Visual Studio Code basado en Windows con extensiones 'Python' y 'Remote - WSL') instalé VcXsrv bajo Windows, y agregó
export DISPLAY=$(awk '/nameserver / {print $2; exit}' /etc/resolv.conf 2>/dev/null):0 al archivo .bashrc en Ubuntu. Además, antes de ejecutar el código de Python desde WSL, debemos iniciar XLaunch y seleccionar 'Desactivar control de acceso' (también dejé marcado 'Native opengl'). En la carpeta del proyecto, no nombre su archivo de Python como matplotlib.py (algunos problemas relacionados se informan aquí ).
En dos instancias separadas (wsl1 y wls2 con ubuntu 20.04) mientras usaba PyQt5 me faltaban varias bibliotecas libxcb (por ejemplo, libxcb-icccm4) que no se imprimieron al intentar trazar. export QT_DEBUG_PLUGINS=1 para averiguar cuáles y luego simplemente los instalé. Básicamente los pasos aquí .
Con Windows 11 22000, las aplicaciones de GUI de Linux son oficialmente compatibles de fábrica , siempre que se cumplan los requisitos previos. Sin ajustes, sin hacks, sin cambios en el firewall, etc.
Requisitos previos:
Luego ejecuta los comandos
wsl --actualizar
wsl --apagado
Hecho !!
Fuente oficial:https://docs.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
Descubrí que el mejor enfoque es instalar Jupyter en el Subsistema de Windows para Linux (WSL) siguiendo
sudo apt update && upgrade sudo apt install python3 python3-pip ipython3Ahora puedes instalar matplotlib
pip3 install matplotlibY el cuaderno Jupyter
pip3 install jupyterConsulte este enlace si necesita más información sobre la configuración de Python en el subsistema de Windows para Linux (WSL)
Para que matplotlib funcione con GTKAgg en Bash en Ubuntu en Windows , yo:
export DISPLAY=localhost:0.0 (agregar a ~/.bashrc para hacerlo permanente)]sudo pip uninstall matplotlibsudo apt install python-matplotlibbackend : GTKAgg (en lugar de backend : agg )sudo apt-get install python-gtk2-dev , pero puede que no sea necesario.Parece necesario desinstalar el matplotlib instalado con pip y reinstalarlo a través de apt porque pip no incluye las extensiones C necesarias para ejecutar GTK, pero la versión apt sí.
Ok, entonces lo tengo funcionando de la siguiente manera. Tengo Ubuntu en Windows, con anaconda python 3.6 instalado.
sudo apt-get updatesudo apt-get install python3.6-tk (es posible que deba instalar un python*-tk diferente según 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 a ~/.bashrc para hacer permanente. Ver WSL2 a continuación)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()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 x11-apps e instalar eso instalará GTK que usan muchas aplicaciones GUI. Pero el punto es que una vez que tenga su PANTALLA configurada 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 se pueden obtener recursos de pantalla' después de actualizar algunas bibliotecas. Así que instalé VcXsrv y lo usé en lugar de Xming. Simplemente instálelo desde https://sourceforge.net/projects/vcxsrv/ y ejecute xlaunch.exe, seleccione varias ventanas, siguiente, siguiente, siguiente, ok. Entonces todo funcionó.
Edición para usuarios de WSL 2 2020-06-23 WSL2 (actualmente anillo rápido interno) tiene compatibilidad con 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:
export DISPLAY=`grep -oP "(?<=nameserver ).+" /etc/resolv.conf`:0.0 Nota: algunos usuarios de WSL2 recibieron un error como couldn't connect to display "172.xxx:0" . Si es así, intenta comprobar 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 que se muestra en el punto 5 a algo que obtenga 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 encuentre su IP y use if para DISPLAY. Para la mayoría de los usuarios de WSL2, el comando del n.º 5 funciona.
Edite para Windows 11 : si MS lo convenció de deshacerse de su computadora vieja y comprar una con un TPM y obtuvo Windows 11, obtendrá la GUI de forma gratuita. Espero que agreguen una ruta de actualización para hacer eso en Windows 10 porque Win10 será como XP y durará mucho tiempo ya que MS decidió que necesita una computadora reciente, aunque Win11 funcionaría bien en computadoras antiguas.