Estoy tratando de trazar un gráfico simple usando pyplot, por ejemplo:
import matplotlib.pyplot as plt plt.plot([1,2,3],[5,7,4]) plt.show()
pero no me aparece la figura y me sale el siguiente mensaje:
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.
Vi en varios lugares que uno tenía que cambiar la configuración de matplotlib usando lo siguiente:
import matplotlib matplotlib.use('TkAgg') import matplotlib.pyplot as plt
Hice esto, pero luego recibí un mensaje de error porque no puede encontrar un módulo:
ModuleNotFoundError: No module named 'tkinter'
Luego, intenté instalar "tkinter" usando pip install tkinter
(dentro del entorno virtual), pero no lo encuentra:
Collecting tkinter Could not find a version that satisfies the requirement tkinter (from versions: ) No matching distribution found for tkinter
También debo mencionar que estoy ejecutando todo esto en Pycharm Community Edition IDE usando un entorno virtual, y que mi sistema operativo es Linux/Ubuntu 18.04.
Me gustaria saber como puedo solucionar este problema para poder visualizar la grafica.
Ejecutar %matplotlib en línea Una vez que me solucionó el problema. Encontré la respuesta aquí: cuando uso matplotlib en jupyter notebook, ¿siempre aparece el error "matplotlib actualmente está usando un backend que no es GUI"? por usuario Mulugeta Weldezgina
agregar %matplotlib en línea al importar ayuda para gráficos fluidos en el cuaderno
%matplotlib inline import matplotlib.pyplot as plt
%matplotlib inline establece el backend de matplotlib en el backend 'en línea': con este backend, el resultado de los comandos de trazado se muestra en línea dentro de frontends como el cuaderno Jupyter, directamente debajo de la celda de código que lo produjo. Los gráficos resultantes también se almacenarán en el documento del cuaderno.
Mi problema comenzó después de que usé pandas_profile (o algo así), y %matplotlib inline
una vez que arreglé el fondo para que no tuviera cabeza, etc.
Esto resolverá el problema. Funciona bien en jupyter.
% matplotlib en línea
Tratar:
%matplotlib inline
Tuve el mismo problema y funcionó para mí. Lo probé en mis cuadernos Jupyter y el código de Visual Studio, por lo que no debería tener problemas.
En Mac OS, lo hice funcionar con:
import matplotlib matplotlib.use('MacOSX')
Ninguna de estas respuestas funcionó para mí usando Pycharm Professional edition 2021.3
Los gráficos regulares de matplotlib funcionaron en la vista científica, pero no me permitieron agregar imágenes a los gráficos.
Lo que funcionó para mí fue agregar esta línea antes de intentar trazar algo:
plt.switch_backend('TkAgg')
Asegúrese de que su servidor X funcione. Matplotlib indica este error si no puede conectarse a la pantalla X.
¡Presta atención al cortafuegos de Windows! Cambié de WSL Debian a Ubuntu y no recordaba la regla del firewall. Uso esta publicación para configurar la regla del firewall de Windows para que el servidor X funcione. Este método evita una regla demasiado permisiva que permita a cualquiera usar su servidor X.
Decía :
Si ya había instalado un servidor X11, es posible que Windows haya creado reglas de firewall que alterarán la configuración anterior. Búscalos y elimínalos en "Firewall de Windows Defender con seguridad avanzada".
Ahora deberá configurar el Firewall de Windows para permitir las conexiones de WSL2 al servidor de pantalla X11. Instalará el servidor de pantalla en el siguiente paso. Realizamos este paso primero para evitar que el Firewall de Windows cree automáticamente una regla de firewall insegura cuando ejecuta el servidor de pantalla X11. Muchas guías sobre el reenvío X11 y WSL2 hacen que esta regla de firewall sea demasiado permisiva, lo que permite conexiones desde cualquier computadora a su computadora. Esto significa que, en teoría, alguien podría, si está en su misma red, comenzar a enviar información de visualización gráfica a su computadora.
Para evitar esto, haremos que el Firewall de Windows solo acepte tráfico de Internet desde la instancia de WSL2.
Para configurar esto, puede copiar lo siguiente en un script y ejecutarlo desde WSL2:
#!/bin/sh LINUX_IP=$(ip addr | awk '/inet / && !/127.0.0.1/ {split($2,a,"/"); print a[1]}') WINDOWS_IP=$(ip route | awk '/^default/ {print $3}') # Elevate to administrator status then run netsh to add firewall rule powershell.exe -Command "Start-Process netsh.exe -ArgumentList \"advfirewall firewall add rule name=X11-Forwarding dir=in action=allow program=%ProgramFiles%\VcXsrv\vcxsrv.exe localip=$WINDOWS_IP remoteip=$LINUX_IP localport=6000 protocol=tcp\" -Verb RunAs"
Método manual:
Como alternativa, puede agregar manualmente la regla a través de una GUI haciendo lo siguiente:
- Abra "Firewall de Windows Defender con seguridad avanzada"
- Al hacer clic en Agregar nueva regla, aparece el Asistente para nueva regla (al lado para navegar entre cada sección):
- Tipo de regla: personalizada
- Programa: "Esta ruta del programa:" %ProgramFiles%\VcXsrv\vcxsrv.exe
- Protocolo y puertos
- Tipo de protocolo: TCP
- Puerto local: 6000
- Puerto remoto: cualquiera
- Alcance
- Dirección IP local: obtenga la dirección IP para ingresar ejecutando el siguiente comando en WSL2
ip route | awk '/^default/ {print $3}'
- direcciones IP remotas
- Obtenga la dirección IP para ingresar ejecutando lo siguiente en WSL2
ip addr | awk '/inet / && !/127.0.0.1/ {split($2,a,"/"); print a[1]}'
- Acción: "Permitir la conexión
- Perfil: dominio de selección, privado y público
- Nombre: "Reenvío X11"
Cuando me encontré con este error en Spyder, cambié de ejecutar mi código línea por línea a resaltar mi bloque de código de trazado y ejecutarlo todo a la vez. Voila, apareció la imagen.
Puede cambiar matplotlib usando el backend usando el comando de agg
a Tkinter TKAgg
usando
matplotlib.use('TKAgg',warn=False, force=True)
Agregué %matplotlib en línea y mi gráfico apareció en Jupyter Notebook.
Cabe destacar el comentario de @xicocaio.
tkinter es específico de la versión de python en el sentido de que sudo apt-get install python3-tk
instalará tkinter exclusivamente para su versión predeterminada de python. Suponga que tiene diferentes versiones de python dentro de varios entornos virtuales, tendrá que instalar tkinter para la versión de python deseada utilizada en ese entorno virtual. Por ejemplo, sudo apt-get install python3.7-tk
. Si no lo hace, se producirán errores No module named ' tkinter'
, incluso después de instalarlo para la versión global de python.
Esto funcionó con reticulado R. Lo encontré aquí .
1: matplotlib.use( 'tkagg' )
o 2: matplotlib$use( 'tkagg' )
Por ejemplo:
import numpy as np import matplotlib.pyplot as plt from matplotlib import style import matplotlib matplotlib.use( 'tkagg' ) style.use("ggplot") from sklearn import svm x = [1, 5, 1.5, 8, 1, 9] y = [2, 8, 1.8, 8, 0.6, 11] plt.scatter(x,y) plt.show()
problema = "Advertencia de usuario: Matplotlib actualmente está usando agg, que es un backend que no es GUI, por lo que no puede mostrar la figura".
Y esto funcionó para mí
import matplotlib import matplotlib.pyplot as plt matplotlib.use('Qt5Agg')
Instalé python3-tk
, en Ubuntu 20.04 y usando WSL2
import numpy as np import matplotlib.pyplot as plt import matplotlib matplotlib.use( 'tkagg')
y luego instalé [GWSL][1] desde la tienda de Windows, lo que parece resolver el problema de la representación WSL2 lista para usar
¿También vea si puede representar gráficos después de las actualizaciones recientes de la GUI de WSL2? [1]: https://www.microsoft.com/en-in/p/gwsl/9nl6kd1h33v3?cid=storebadge&activetab=pivot:overviewtab#
He resuelto poner matplotlib.use('TkAgg') después de todas las declaraciones de importación. Uso python 3.8.5 VSCODE y anaconda. Ningún otro truco funcionó.
Si instala versiones de python usando pyenv en sistemas basados en Debian, asegúrese de ejecutar sudo apt install tk-dev
antes de pyenv install
. Si ya está instalado, elimínelo con pyenv uninstall
e instálelo nuevamente después de instalar tk-dev
. Por lo tanto, no es necesario establecer ninguna variable env cuando se ejecuta pyenv install
.
Funciona si usa algún código de terceros en su proyecto. Probablemente contiene la siguiente línea
matplotlib.use('Agg')
Búscalo y coméntalo.
Si no tiene idea de qué es, probablemente no esté usando esta parte del código.
Las soluciones sobre el uso de otra GUI de back-end pueden ser más limpias, así que elija su luchador.
La respuesta se ha dado varias veces pero no es obvia, uno necesita instalar gráficos, esto funciona.
pip3 install PyQt5
Espero que esto le ahorre tiempo a alguien.
Si usa el cuaderno Jupyter, intente lo siguiente:
%matplotlib inline
Esto debería representar la trama incluso si no se especifica el
plt.show()
mando.
La solución que funcionó para mí:
Instalar tkinter
importar tkinter al módulo
asegúrese de que matplotlib use (TkAgg) en lugar de (Agg)
matplotlib.use('TkAgg')
Tenga cuidado con el orden de importación en su código, pasé un día entero revisando estas respuestas y terminé resolviendo el problema importando bt antes que nada y luego usando la .use('TkAgg')
(por alguna razón, importar bt cambia el backend de matplotlib a 'Agg')
ejecute el siguiente comando antes de trazar
%matplotlib inline
Otra opción es instalar Anaconda . Es un software útil donde puede crear muchos entornos y hay muchas bibliotecas ya instaladas para la ciencia de datos y el aprendizaje automático.
--Editar --
Aquí hay pasos que me ayudan a solucionar su mismo problema:
En esta sección, puede crear muchos env como prefiera, es decir, tengo 2 env uno para mi base principal (raíz) uno para la última versión de python.
Paso 3: al crear el py env en esta sección, Anaconda instalará automáticamente las principales bibliotecas utilizadas por los desarrolladores, lo que disminuirá el riesgo de obtener errores en su código.
Consideración adicional : como puede ver en el complemento a continuación, puede ver fácilmente qué bibliotecas ha instalado en su conda. Recibí tu mismo ese error porque me perdí una de esas 3 librerías
¡La esperanza fue útil y clara de entender! cya
Para Windows 10, si usar pip install tk
no funciona para usted, intente:
Fuente de mi corrección: https://stackoverflow.com/a/59970646/2506354
Linux Mint 19. Me ayudó:
sudo apt install tk-dev
PS Vuelva a compilar el intérprete de python después de la instalación del paquete.
Yo también tuve este problema en PyCharm. Este problema se debe a que no tiene el módulo tkinter en su máquina.
Para instalar, siga los pasos que se indican a continuación (seleccione su sistema operativo adecuado)
Para usuarios de ubuntu
sudo apt-get install python-tk
o
sudo apt-get install python3-tk
Para usuarios de Centos
sudo yum install python-tkinter
o
sudo yum install python3-tkinter
para usuarios de Arch
sudo pacman -S tk
o
sudo pamac install tk
Para Windows, use pip para instalar tk
Después de instalar tkinter, reinicie su Pycharm y ejecute su código, funcionará
Instalación sencilla
pip3 install PyQt5==5.9.2
Esto funciona para mi.
Por si acaso esto ayuda a alguien.
Versión de Python: plataforma 3.7.7: Ubuntu 18.04.4 LTS
Esto vino con la versión predeterminada de python 3.6.9, sin embargo, había instalado mi propia versión 3.7.7 de python en él (instalado construyéndolo desde la fuente)
tkinter no funcionaba incluso cuando la help('module')
muestra tkinter en la lista.
Los siguientes pasos funcionaron para mí:
sudo apt-get install tk-dev.
reconstruya el python: 1. Navegue a su carpeta python y ejecute las comprobaciones:
cd Python-3.7.7 sudo ./configure --enable-optimizations
sudo make -j 8
--- aquí 8 es el número de procesadores, verifique el suyo usando el comando nproc
.Instalación usando:
sudo make altinstall
No use sudo make install, sobrescribirá la versión predeterminada 3.6.9, lo que podría ser complicado más adelante.
python3.7 -m tkinter
Aparecerá un cuadro de ventana, su tkinter está listo ahora.
Después de actualizar muchos paquetes ( Spyder
3 a 4, Keras
y Tensorflow
y muchas de sus dependencias), ¡hoy tuve el mismo problema! No puedo entender lo que pasó; pero el entorno virtual (basado en conda) que seguía usando Spyder
3 no tenía el problema. Aunque instalar tkinter
o cambiar el backend, via matplotlib.use('TkAgg)
como se muestra arriba, o esta buena publicación sobre cómo cambiar el backend , podría resolver el problema, no las veo como soluciones rígidas. Para mí, desinstalar matplotlib
y reinstalarlo fue mágico y el problema se resolvió.
pip uninstall matplotlib
... entonces, instale
pip install matplotlib
De todo lo anterior, esto podría ser un problema de administración de paquetes y, por cierto, uso tanto conda
como pip
, siempre que sea posible.
Intente import tkinter
porque pycharm ya instaló tkinter para usted, busqué Instalar tkinter para Python
Tal vez puedas intentar:
import tkinter import matplotlib import matplotlib.pyplot as plt matplotlib.use('TkAgg') plt.plot([1,2,3],[5,7,4]) plt.show()
como una forma de instalación de tkinter
Lo intenté a tu manera, parece que no hay ningún error al ejecutarlo en mi computadora, muestra correctamente la figura. tal vez porque pycharm tiene tkinter como paquete de sistema, por lo que no necesita instalarlo. Pero si no puede encontrar tkinter adentro, puede ir a Tkdocs para ver la forma de instalar tkinter, como menciona, tkinter es un paquete central para python.
tk
Encontré una solución a mi problema (gracias a la ayuda de ImportanceOfBeingErnest ).
Todo lo que tenía que hacer era instalar tkinter
a través de la terminal bash de Linux usando el siguiente comando:
sudo apt-get install python3-tk
en lugar de instalarlo con pip
o directamente en el entorno virtual en Pycharm.
matplotlib
TkAgg
Qt5Agg
, GTKAgg
, Qt4Agg
, etc.pip install pyqt5
también solucionará el problemaNOTA:
matplotlib
hicieron que los departamentos de software de pypi no dependieran de ningún backend de GUI porque algunas personas necesitan matplotlib
sin ningún backend de GUI.Si usa Arch Linux (distribuciones como Manjaro
o Antegros
) simplemente escriba:
sudo pacman -S tk
¡Y todo funcionará perfectamente!
En mi caso, el mensaje de error implicaba que estaba trabajando en una consola sin periféricos. Así que plt.show()
no pudo funcionar. Lo que funcionó fue llamar a plt.savefig
:
import matplotlib.pyplot as plt plt.plot([1, 2, 3], [5, 7, 4]) plt.savefig("mygraph.png")
Encontré la respuesta en un repositorio de github .