“UserWarning: Matplotlib está usando agg, que é um back-end não-GUI, então não pode mostrar a figura.” ao traçar a figura com pyplot no Pycharm

125

Estou tentando traçar um gráfico simples usando pyplot, por exemplo:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[5,7,4])
plt.show()

mas a figura não aparece e recebo a seguinte mensagem:

UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure.

Eu vi em vários lugares que era preciso alterar a configuração do matplotlib usando o seguinte:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt

Fiz isso, mas recebi uma mensagem de erro porque não consigo encontrar um módulo:

ModuleNotFoundError: No module named 'tkinter'

Então, tentei instalar o "tkinter" usando pip install tkinter(dentro do ambiente virtual), mas não encontrou:

Collecting tkinter
  Could not find a version that satisfies the requirement tkinter (from versions: )
No matching distribution found for tkinter

Devo também mencionar que estou executando tudo isso no Pycharm Community Edition IDE usando um ambiente virtual, e que meu sistema operacional é Linux / Ubuntu 18.04.

Gostaria de saber como posso resolver este problema para poder visualizar o gráfico.

johnwolf1987
fonte
7
Esqueça o gráfico por um momento. Seu problema é instalar o tkinter. Você tentou alguma das soluções disponíveis para isso, por exemplo, stackoverflow.com/questions/4783810/install-tkinter-for-python ?
ImportanceOfBeingErnest
3
Você está realmente usando o tkinter para alguma coisa ou apenas o escolheu como um back-end plt?
G. Anderson de
1
@ImportanceOfBeingErnest: Obrigado pela dica. De fato, vou me concentrar em instalar o tkinter primeiro. Vou dar uma olhada no link que você forneceu e ver se posso fazer algo com ele.
johnwolf1987
1
@ G.Anderson: Eu não tinha ideia do que era tkinter antes de encontrar esse erro com matplotlib. Agora estou tentando instalá-lo apenas para poder mostrar gráficos (então sim, acho que apenas o escolhi como um backend plt). Se você souber de alguma outra maneira (ou seja, sem usar tkinter), ficaria feliz em saber.
johnwolf1987
2
@ G.Anderson: Eu executei o script para percorrer os diferentes back-ends. Acontece que apenas o TkAgg está disponível! Na verdade, acabei de instalá-lo antes de testar o script.
johnwolf1987

Respostas:

191

Encontrei uma solução para o meu problema (graças à ajuda do ImportanceOfBeingErnest ).

Tudo que precisei fazer foi instalar tkinterpor meio do terminal bash do Linux usando o seguinte comando:

sudo apt-get install python3-tk

em vez de instalá-lo com pipou diretamente no ambiente virtual do Pycharm.

johnwolf1987
fonte
7
Na verdade, também percebi que, desde que instalei o tkinter, não preciso mais adicionar as duas primeiras linhas do meu código ( import matplotlibe matplotlib.use('TkAgg'))
johnwolf1987
Para completar, em OpenSuse Leap o pacote que eu tive que instalar é chamado python3-matplotlib-tk.
Eldrad
5
Essa resposta provavelmente poderia mencionar que tkinteré específico da versão do python, no sentido de que este comando em particular será instalado tkinterexclusivamente para sua versão padrão do python. Suponha que você tenha instalações de versões diferentes de python para vários ambientes virtuais. Nesse caso, você terá que instalá-lo para a versão do Python desejada usada naquele venv em funcionamento. Por exemplo, no meu caso: sudo apt-get install python3.7-tk. Não saber disso me fez lutar um tempo razoável para não obter erros de nome de módulo 'tkinter', mesmo depois de instalá-lo para minha versão global de python.
xicocaio
Tive que instalar um Terminal Bash do Linux no meu PC para executar este comando. E funcionou! Veja howtogeek.com/249966/…
arame3333
38

No meu caso, a mensagem de erro sugeria que eu estava trabalhando em um console sem interface. Portanto, plt.show()não poderia funcionar. O que funcionou foi chamar plt.savefig:

import matplotlib.pyplot as plt

plt.plot([1,2,3], [5,7,4])
plt.savefig("mygraph.png")

Eu encontrei a resposta em um repositório github .

vinzee
fonte
16

Se você usa Arch Linux (distribuições como Manjaroou Antegros) simplesmente digite:

sudo pacman -S tk

E tudo funcionará perfeitamente!

dexXxed
fonte
1
Obrigado. Estava procurando por isso.
logicOnAbstractions
7

Tente import tkinterporque o pycharm já instalou o tkinter para você, procurei Instalar o tkinter para Python

Você pode tentar:

import tkinter
import matplotlib
matplotlib.use('TkAgg')
plt.plot([1,2,3],[5,7,4])
plt.show()

como uma forma de instalação do tkinter

Já tentei do seu jeito, parece que não há erro ao rodar no meu computador, ele mostra a figura com sucesso. talvez porque o pycharm tem tkinter como um pacote de sistema, então você não precisa instalá-lo. Mas se você não conseguir encontrar o tkinter dentro, você pode ir ao Tkdocs para ver a maneira de instalar o tkinter, como ele menciona, tkinter é um pacote básico para python.

okie
fonte
Obrigado pela sua sugestão. Infelizmente, não funciona ( ModuleNotFoundError: No module named 'tkinter'). Vou tentar instalar o tkinter de outra forma.
johnwolf1987
6

Eu também tive esse problema no PyCharm. Esse problema ocorre porque você não tem o módulo tkinter em sua máquina.

Para instalar, siga as etapas abaixo (selecione seu sistema operacional apropriado)

Para usuários do Ubuntu

 sudo apt-get install python-tk

ou

 sudo apt-get install python3-tk

Para usuários Centos

 sudo yum install python-tkinter

ou

 sudo yum install python3-tkinter

Para Windows, use pip para instalar tk

Depois de instalar o tkinter reinicie seu Pycharm e execute seu código, ele vai funcionar

Arjun Kumar
fonte
3

Instalação simples

pip3 install PyQt5==5.9.2

Funciona para mim.

Manish Gupta
fonte
Sim, funciona! Eu instalei dentro do meu ambiente virtual através do terminal do PyCharm.
WH Lee
Eu executo "pip3 install PyQt5" sem especificar o número da versão.
oraclesoon
1

Você pode alterar o matplotlib usando o backend usando o de aggpara o Tkinter TKAggusando o comando

matplotlib.use('TKAgg',warn=False, force=True)
Shahir Ansari
fonte
Isso foi muito útil devido ao fato de que eu não tive que recarregar meu console ipython interativo lol. Obrigado
Iulian Pinzaru
0

Linux Mint 19. Ajudou para mim:

sudo apt install tk-dev

PS Recompile o interpretador python após a instalação do pacote.

Michael Sizonenko
fonte
0

Apenas no caso de ajudar alguém.

Versão Python: plataforma 3.7.7: Ubuntu 18.04.4 LTS

Isso veio com o python padrão versão 3.6.9, no entanto, eu tinha instalado minha própria versão 3.7.7 do python nele (instalado compilando-o a partir da fonte)

tkinter não estava funcionando mesmo quando o help('module') mostra tkinter na lista.

As etapas a seguir funcionaram para mim:

  1. sudo apt-get install tk-dev.

reconstruir o python: 1. Navegue até a pasta python e execute as verificações:

cd Python-3.7.7
sudo ./configure --enable-optimizations
  1. Construir usando o comando make: sudo make -j 8 --- aqui 8 são o número de processadores, verifique o seu usando o nproccomando.
  2. Instalando usando:

    sudo make altinstall
    

Não use sudo make install, ele sobrescreverá a versão 3.6.9 padrão, que pode ser confusa mais tarde.

  1. Verifique o tkinter agora
    python3.7 -m tkinter
    

Uma caixa de janela aparecerá, seu tkinter está pronto agora.

Divas
fonte
0

Depois de atualizar muitos pacotes ( Spyder3 a 4,Keras e Tensorflowe lotes de suas dependências), eu tive o mesmo problema hoje! Não consigo descobrir o que aconteceu; mas o ambiente virtual (baseado em conda) que continuou usando Spyder3 não teve o problema. Embora instalar tkinterou alterar o back-end, via matplotlib.use('TkAgg)como mostrado acima, ou este belo post sobre como alterar o back-end , possa resolver o problema, não vejo essas soluções como rígidas. Para mim, desinstalar matplotlibe reinstalar foi mágico e o problema foi resolvido.

pip uninstall matplotlib

... então, instale

pip install matplotlib

De todo o exposto, este pode ser um problema de gerenciamento de pacote, e BTW, eu uso ambos conda e pip, sempre que possível.

Mohd
fonte
0

Quando encontrei esse erro no Spyder, mudei de executar meu código linha por linha para destacar meu bloco de plotagem de código e executar tudo de uma vez. Voila, a imagem apareceu.

GuyStalks
fonte
0

Eu adicionei % matplotlib embutido e meu gráfico apareceu no Jupyter Notebook.

chinelo Okafor
fonte
0

O comentário de @xicocaio deve ser destacado.

tkinter é específico da versão do python, no sentido de que sudo apt-get install python3-tkinstalará o tkinter exclusivamente para sua versão padrão do python. Suponha que você tenha diferentes versões de python em vários ambientes virtuais, você terá que instalar o tkinter para a versão de python desejada usada naquele ambiente virtual. Por exemplo sudo apt-get install python3.7-tk,. Não fazer isso ainda levará a No module named ' tkinter'erros, mesmo depois de instalá-lo para a versão global do python.

Hari
fonte