Pycharm não mostra plot

100

O Pycharm não mostra o gráfico do seguinte código:

import pandas as pd
import numpy as np
import matplotlib as plt

ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))

ts = ts.cumsum()    
ts.plot()

O que acontece é que uma janela aparece por menos de um segundo e depois desaparece novamente.

Usando o IDE Pyzo IEP (usando o mesmo interpretador) no mesmo código, o gráfico mostra conforme o esperado.

... Portanto, o problema deve ser com alguma configuração no Pycharm. Tentei usar o python.exe e o pythonw.exe como interpretadores, ambos com os mesmos resultados.

Este é meu sys_info:

C:\pyzo2014a\pythonw.exe -u C:\Program Files (x86)\JetBrains\PyCharm Community Edition 3.4.1\helpers\pydev\pydevconsole.py 57315 57316
PyDev console: using IPython 2.1.0import sys; print('Python %s on %s' % (sys.version, sys.platform))
Python 3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, 13:02:30) [MSC v.1600 64 bit (AMD64)] on win32
sys.path.extend(['C:\\Users\\Rasmus\\PycharmProjects\\untitled2'])
In[3]: import IPython
print(IPython.sys_info())
{'commit_hash': '681fd77',
 'commit_source': 'installation',
 'default_encoding': 'UTF-8',
 'ipython_path': 'C:\\pyzo2014a\\lib\\site-packages\\IPython',
 'ipython_version': '2.1.0',
 'os_name': 'nt',
 'platform': 'Windows-8-6.2.9200',
 'sys_executable': 'C:\\pyzo2014a\\pythonw.exe',
 'sys_platform': 'win32',
 'sys_version': '3.4.1 |Continuum Analytics, Inc.| (default, May 19 2014, '
                '13:02:30) [MSC v.1600 64 bit (AMD64)]'}
Rasmus Larsen
fonte
6
faz plt.pyplot.show()o trabalho?
Padraic Cunningham
1
Isso não. Ao executar exatamente 'plt.pyplot.show ()', ele não funciona. Devo escrever outra coisa em vez de 'pyplot'? (noob aqui).
Rasmus Larsen
o que acontece quando você executa o código em pycharm?
Padraic Cunningham
Quando eu executo o arquivo acontece a mesma coisa: uma janela aparece e desaparece rapidamente, impressão do console: Processo finalizado com código de saída 0. Quando eu envio para o console a janela aparece e permanece, mas nada é desenhado na janela, é apenas branco. O rótulo da janela é "Figura 1 (não está respondendo)"
Rasmus Larsen
Você deve adicionar matplotlib.pyplot para visualizá-lo. Consulte: stackoverflow.com/a/29042575/4989929
Ronak Poriya

Respostas:

103

Apenas use

plt.show()

Este comando informa ao sistema para desenhar o gráfico no Pycharm.

Exemplo:

plt.imshow(img.reshape((28, 28)))
plt.show()
Amit Lohan
fonte
4
É realmente incrível - funcionou para mim, e nenhum dos outros funcionou. O que foi surpreendente é que eu não precisava de plt.show () no Jupyter Notebook, não sei por que o comportamento é diferente no PyCharm
Ambareesh
o mesmo aqui. Eu não precisava dele no Jupyter Notebook
pooria
Sempre esqueço de chamar assim também. Isso informa ao sistema para realmente desenhá-lo em um pycharm. O Notebook chamará automaticamente as funções de desenho e impressão por padrão. Acho que foi feito assim para uma prototipagem mais rápida.
MNM
E se eu precisar usar, plt.draw()já que estou atualizando a figura mais tarde? plt.show()funciona bem, mas plt.draw()não mostra nada no PyCharm.
CGFoX
1
Pode ser que você não precise disso nos notebooks porque você fez algo assim %matplotlib inline. @CGFox, draw foi criado para renderizar explicitamente na memória, mas não exibir na tela (ou arquivo). Você precisa plt.pause (0.1) para que os gráficos sejam exibidos ou chamar plt.show (pause = True) em algum outro ponto do código para fazê-los renderizar
xaviersjs
54

Sei que isso é antigo, mas achei que poderia esclarecer um equívoco para outros viajantes. Definir plt.pyplot.isinteractive()como Falsesignifica que o gráfico será desenhado em comandos específicos para desenhar (ou seja plt.pyplot.show()). Definir plt.pyplot.isinteractive()como Truesignifica que todo comando pyplot( plt) acionará um comando de desenho (ou seja plt.pyplot.show()). Então, o que você provavelmente estava procurando éplt.pyplot.show() o final do programa para exibir o gráfico.

Como observação lateral, você pode encurtar um pouco essas declarações usando o seguinte comando de importação em import matplotlib.pyplot as pltvez de matplotlib as plt.

user3915686
fonte
14
Adicionar plt.show (block = True) ao final da minha função é o que funcionou para mim. Obrigado pelo esclarecimento. (Python 3.x, PyCharm 2016.1.4, Ubuntu)
SummerEla
Isso é o que funciona para mim (Python 2.7, Pycharm 2016.3, Ubuntu 16.04): "import matplotlib.pyplot as plt", então o gráfico de função do DataFrame como em "corr_data [col] .plot (kind =" bar ", figsize = (8, 5), grid = True, color = "r", title = col) "e antes de sair da função," plt.show () "
Taka
34

Eu tive o mesmo problema. Verifique se plt.isinteractive()é verdadeiro. Definir como 'False' ajudou para mim.

plt.interactive(False)
DanT
fonte
9
Chamar plt.show (block = True) ajudou a mostrar o gráfico uma vez para mim. Mas o console foi bloqueado mesmo depois de fechar a janela de gráficos.
DanT
plt.interactive (False) fez isso por mim em PyCharm
fantabolous
Não tenho mais o Python instalado, então não sei se funcionaria para mim, mas como funciona para outros, aceitarei esta resposta (espero que esteja correto de acordo com as regras do stackoverflow)
Rasmus Larsen
8
A solução correta é definir plt.show (block = True) como @charlie sugeriu abaixo. Depois de adicionar esta linha, o valor do sinalizador plt.interactive () não teve influência no gráfico que está sendo exibido.
Geladura
Isso não funcionou para mim `para cluster_id no intervalo (len (tempx [0])): plt.plot (tempx, tempy, 'rx--', markersize = 8) plt.legend (loc = 4, framealpha = 0.5) plt.interactive (False) plt.show (block = True) `
Mona Jalal
29

Tentei soluções diferentes, mas o que finalmente funcionou para mim foi plt.show(block=True). Você precisa adicionar este comando após o myDataFrame.plot()comando para que tenha efeito. Se você tiver vários gráficos, basta adicionar o comando no final do seu código. Isso permitirá que você veja todos os dados que está traçando.

Charlie Armstrong
fonte
2
Isso fez isso por mim. Deve ser a resposta aceita. Mexer com o plt.interactive () fez nada
frostbite
Eu concordo porque isso me ajudou também. Definir o modo interativo como False e adicionar "DISPLAY = TRUE" às variáveis ​​de ambiente não ajudou.
Fábio
22
import matplotlib
matplotlib.use('TkAgg')

Funciona para mim. (PyCharm / OSX)

Joe Bobson
fonte
Isso também funcionou para mim no Windows 10, quando plt.show()não ajudou mais em uma versão mais recente do PyCharm (2020.1).
Corbie
14

Eu testo em minha versão do Pycharm (Community Edition 2017.2.2), você pode precisar anunciar tanto plt.interactive (False) quanto plt.show (block = True) da seguinte forma:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 6.28, 100)

plt.plot(x, x**0.5, label='square root')
plt.plot(x, np.sin(x), label='sinc')

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("test plot")

plt.legend()

plt.show(block=True)
plt.interactive(False)
Tairen
fonte
lamento ouvir isso. Acho que também funciona no Pycharm 2017.3 (edição da comunidade). Você pode tentar usar uma nova versão do Pycharm?
tairen
Oi, Saria, desculpe por isso. Eu testei no meu Pycharm 2018.1.2 (edição da comunidade) com o Ubuntu OS. Também funciona.
tairen
Olá, funciona para Pycharm 2019.3 com MacOs Catalina
Milad nourizade
13

Eu encontrei uma solução. Isso funcionou para mim:

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5, 5, 0.01)
dx, dy = np.meshgrid(points, points)
z = (np.sin(dx)+np.sin(dy))
plt.imshow(z)
plt.colorbar()
plt.title('plot for sin(x)+sin(y)')
plt.show()
Dhruv
fonte
Mas agora estou enfrentando um novo problema. Depois que o gráfico é gerado em uma nova janela, o novo código que adicionei após o gráfico não é executado, até que eu feche a janela recém-aberta.
Dhruv
2
A linha importante que estava faltando na pergunta é plt.show ()
Yoav
6

Logo depois de ligar

plt.imshow() 

ligar

plt.show(block = True)

Você obterá o pop-up matplotlib com a imagem.

Esta é uma forma de bloqueio. O script posterior não será executado até que o pop seja fechado.

Sudeep K Rana
fonte
Isso é o que eu estava procurando.
NelsonGon
5

Comigo, o problema era o fato de que matplotlib estava usando o backend errado. Estou usando o Debian Jessie.

Em um console, fiz o seguinte:

import matplotlib
matplotlib.get_backend()

O resultado foi: 'agg', mas deveria ser 'TkAgg'.

A solução era simples:

  1. Desinstalar matplotlib via pip
  2. Instale as bibliotecas apropriadas: sudo apt-get install tcl-dev tk-dev python-tk python3-tk
  3. Instale matplotlib via pip novamente.
Arie
fonte
5

Apenas adicione plt.pyplot.show(), isso seria ótimo.

A melhor solução é desativar o SciView.

Taki Guan
fonte
4

Testei na minha versão no PyCharm 2017.1.2. Usei interativo (True) e show (block = True).

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1//2000',periods=1000))
ts = ts.cumsum()
plt.interactive(True)
ts.plot()
plt.show(block=True)
m4ndy
fonte
4

Nenhuma das opções acima funcionou para mim, mas o seguinte funcionou:

  1. Desative a caixa de seleção (Mostrar gráficos na janela de ferramentas) no pycharm settings > Tools > Python Scientific.

  2. Recebi o erro No PyQt5 module found. Prosseguiu com a instalação de PyQt5usando:

    sudo apt-get install python3-pyqt5

Cuidado, pois para alguns apenas o primeiro passo é suficiente e funciona.

AbdulRehmanLiaqat
fonte
1
Deixe claro que o primeiro passo ainda pode ser a solução, pois funcionou para mim. Dito assim, a outra resposta repetitiva de @ amir1122 tem o direito de existir. O que também está bom, é claro, e você ainda tem meu voto positivo.
Lorenz
1
@Lorenz. Atualizado de acordo com sua sugestão o que faz sentido.
AbdulRehmanLiaqat
A etapa 1 funciona, mas parece uma solução alternativa. Suspeito que, no meu caso, seja porque tenho várias versões do Python (3.6, 3.7 e 3.8) por aí.
Josiah Yoder
2

Meu env: macOS e anaconda3

Isso funciona para mim:

matplotlib.use('macosx')

ou modo interativo:

matplotlib.use('TkAgg')
Zoe L
fonte
Adicione isto antes de importar matplotlib.pyplot
Zoe L
2

Eu tive esse problema e eu poderia resolvê-lo, você pode testar meu caminho .. desative "mostrar gráficos na janela de ferramentas" em configuração -> ferramentas -> python científico

amir1122
fonte
1
Esta resposta já foi fornecida há dois anos (por exemplo, em stackoverflow.com/a/52221178/466862 ). Ao responder a perguntas mais antigas, certifique-se de responder a uma solução nova e diferente ou a uma explicação significativamente melhor.
Mark Rotteveel
Isso é repetir a resposta de @ AbdulRehmanLiaqat, mas pelo menos afirma claramente que essa pode ser uma solução possível. Eu primeiro votei contra isso por causa da repetição. Agora votei positivamente, simplesmente porque a outra resposta não afirma claramente que este único passo aqui já pode resolvê-lo, em vez disso, menciona um erro posterior que não apareceu no meu caso.
Lorenz
1

O comentário do DanT corrigiu isso para mim, matplotlib com pycharm no linux com o backend GTKagg. Ao importar matplotlib, receberia o seguinte erro:

>>> import matplotlib as mpl

Backend GTKAgg is interactive backend. Turning interactive mode on.
Failed to enable GUI event loop integration for 'gtk'

Ao traçar algo assim:

from matplotlib import pyplot as plt
plt.figure()
plt.plot(1,2)
plt.show()

Uma tela de figura aparecerá, mas nenhum gráfico aparecerá. usando:

plt.show(block=True)

exibe o gráfico corretamente.

Bastiaan
fonte
1

No meu caso, eu queria fazer o seguinte:

    plt.bar(range(len(predictors)), scores)
    plt.xticks(range(len(predictors)), predictors, rotation='vertical')
    plt.show()

Seguindo uma combinação das soluções aqui, minha solução foi adicionar antes disso os seguintes comandos:

    matplotlib.get_backend()
    plt.interactive(False)
    plt.figure()

com as seguintes duas importações

   import matplotlib
   import matplotlib.pyplot as plt

Parece que todos os comandos são necessários no meu caso, com um MBP com ElCapitan e PyCharm 2016.2.3. Saudações!

Marc Torrellas
fonte
1

Em env não interativo, temos que usar plt.show (block = True)

tkr_in
fonte
1

Para aqueles que estão executando um script dentro de um IDE (e não trabalhando em um ambiente interativo como um console Python ou um notebook), descobri que esta é a solução mais intuitiva e simples:

plt.imshow(img)
plt.waitforbuttonpress()

Ele mostra a figura e espera até que o usuário clique na nova janela. Só então ele retoma o script e executa o resto do código.

Azim
fonte
1

Consegui obter uma combinação de algumas das outras sugestões que funcionam para mim, mas apenas ao alternar plt.interactive(False)entre Truee novamente.

plt.interactive(True)
plt.pyplot.show()

Isso piscará nos meus gráficos. Em seguida, defina como Falsepermitido para visualização.

plt.interactive(False)
plt.pyplot.show()

Conforme observado, meu programa não fecharia até que todas as janelas fossem fechadas. Aqui estão alguns detalhes sobre meu ambiente de execução atual:

Python version 2.7.6
Anaconda 1.9.2 (x86_64)
(default, Jan 10 2014, 11:23:15) 
[GCC 4.0.1 (Apple Inc. build 5493)]
Pandas version: 0.13.1
Nathan W
fonte
0

Uma propriedade precisa ser definida para o pycharm.

import matplotlib.pyplot as plt

plt.interactive(False)  #need to set to False

dataset.plot(kind='box', subplots=True, layout=(2,2), sharex=False, sharey=False)

plt.show()
Nilesh Shinde
fonte
0

Alterar importação para:

import matplotlib.pyplot as plt

ou use esta linha:

plt.pyplot.show()
Mise
fonte
0

Estou usando o Ubuntu e tentei como @Arie disse acima, mas com esta linha apenas no terminal:

sudo apt-get install tcl-dev tk-dev python-tk python3-tk

E funcionou!

Farouk Fadly
fonte
0

No Pycharm, às vezes o Matplotlib.plot não aparece.

Então, depois de chamar, plt.show()verifique na barra de ferramentas do lado direito do SciView. Dentro do SciView, todos os gráficos gerados serão armazenados.

DAVIS BENNY 15MIS0426
fonte
0

Eu estava enfrentando o erro acima quando estou tentando traçar o histograma e os pontos abaixo funcionaram para mim.

SO: Mac Catalina 10.15.5

Versão do Pycharm: versão da comunidade 2019.2.3

Versão Python: 3.7

  1. Alterei a declaração de importação conforme abaixo (de - para)

de :

import matplotlib.pylab as plt

para:

import matplotlib.pyplot as plt

  1. e plot declaração abaixo (alterou meu formulário de comando pyplot para plt)

de:

plt.pyplot.hist(df["horsepower"])

# set x/y labels and plot title
plt.pyplot.xlabel("horsepower")
plt.pyplot.ylabel("count")
plt.pyplot.title("horsepower bins") 

para :

plt.hist(df["horsepower"])

# set x/y labels and plot title
plt.xlabel("horsepower")
plt.ylabel("count")
plt.title("horsepower bins")
  1. use plt.show para exibir o histograma

plt.show()

Tapan Hegde
fonte