O matplotlib não mostra meus desenhos, embora eu chame de pyplot.show ()

175

Ajuda necessária no matplotlib. Sim, não esqueci de chamar o pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Retorna matplotlib.lines.Line2D at 0xade2b2ccomo a saída.

p.show()

Não há nada para acontecer. Nenhuma mensagem de erro. Nenhuma nova janela. Nada. Eu instalo matplotlibusando pip e não recebi nenhuma mensagem de erro.

Detalhes:

Eu uso,

  • Ubuntu
  • IPython v0.11
  • Python v2.6.6
  • matplotlib v1.0.1
Baskaya
fonte

Respostas:

177

Se eu definir meu back-end como templatein ~/.matplotlib/matplotlibrc, posso reproduzir seus sintomas:

~ / .matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Note-se que o arquivo matplotlibrcnão pode ser no diretório ~/.matplotlib/. Nesse caso, o código a seguir mostra onde está:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Se você editar ~/.matplotlib/matplotlibrce alterar o back-end para algo como GtkAgg, deverá ver um gráfico. Você pode listar todos os back-end disponíveis em sua máquina com

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Deve retornar uma lista como:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Referência:

unutbu
fonte
2
Eu tentei, mas eu tenho uma coisa erro como:ImportError: No module named _backend_gdk
Baskaya
6
Desculpe por muitos comentários. Funciona. Eu tentei o Qt4Agg e acertei. Obrigado :) .. Última coisa, onde posso encontrar o matplotlibrc padrão ou existe alguma maneira de criá-lo?
Baskaya
Desculpe pela desordem. Eu acho que eu encontrei
Baskaya
8
Esta resposta é antiga, a configuração deve estar agora ~/.config/matplotlib/matplotlibrc(pelo menos para python 3). Eu apenas tive um problema relacionado e acho que foi causado pelo uso do matplotlib no python 2.7, que criou um ~/.matplotlib/diretório e impediu o python 3 de ler a configuração ~/.config/matplotlib/. A exclusão ~/.matplotlib/corrigiu o problema para mim.
naught101
5
Seis anos depois e esse problema ainda existe ... Agora me lembro porque odeio Python: um problema em todas as linhas de código.
Pookie
70

Encontrei exatamente o mesmo problema no Ubuntu 12.04, porque instalei o matplotlib (dentro de uma virtualenv) usando

pip install matplotlib

Para encurtar a história, meu conselho é: não tente instalar o matplotlib usando o pip ou manualmente; deixe um gerenciador de pacotes real (por exemplo, apt-get / synaptic) instalá-lo e todas as suas dependências para você.

Infelizmente, os back-end do matplotlib (métodos alternativos para renderizar suas plotagens) têm todos os tipos de dependências com as quais o pip não lidará. Pior ainda, falha silenciosamente; isto é, pip install matplotlibparece instalar o matplotlib com sucesso. Mas quando você tenta usá-lo (por exemplo pyplot.show()), nenhuma janela de plotagem aparecerá. Tentei todos os back-ends diferentes sugeridos pelas pessoas na web (Qt4Agg, GTK etc.) e todos falharam (ou seja, quando tentei importar o matplotlib.pyplot, recebo ImportErrorporque está tentando importar alguma dependência que está faltando). Depois, pesquisei como instalar essas dependências, mas isso me fez desistir de usar o pip (no virtualenv) como uma solução de instalação viável para qualquer pacote que possua dependências de pacotes que não sejam do Python.

Toda a experiência me enviou de volta ao apt-get / synaptic (ou seja, o gerenciador de pacotes Ubuntu) para instalar software como o matplotlib. Isso funcionou perfeitamente. Obviamente, isso significa que você só pode instalar nos diretórios do sistema, sem vantagens de virtualenv, e está preso às versões que o Ubuntu distribui, o que pode estar muito atrás da versão atual ...

Christopher Lee
fonte
2
Sua resposta é longa, você pode considerar encurtar o OP.
precisa saber é o seguinte
5
Você já tentou a --system-site-packagesopção?
Tianyang Li 14/01
1
% Christopher Lee O problema com os números não exibidos sem nenhum erro / outra reclamação é porque o back-end padrão pip installestá agg. Não sei por que, mas você pode alterá-lo de acordo com a resposta do unutbu. piptem a principal vantagem de instalar uma versão atualizada - aptinstala uma versão desatualizada. Às vezes, existem correções de bugs / novos recursos que você deseja / precisa.
Drevicko
2
Apenas desativando virtualenvfuncionou! E eu consegui instalar o matplotlib 1.4 a partir do sistema de origem (no Ubuntu), mas não no virtualenv.
osa
1
E qual é a solução para aqueles que estão presos nas máquinas de trabalho do Windows que não podem usar o apt-get?
ale19
33

% matplotlib inline

Para mim, trabalhando com notebook, adicionando a linha acima antes que o enredo funcione.

grampus
fonte
Eu precisava usar %pylab inlineno meu notebook como observado por @Bhanu Pratap Singh
Reed Sandberg
10

Para referência futura,

Eu encontrei o mesmo problema - o pylab não estava aparecendo no ipython. O problema foi corrigido alterando o arquivo de configuração do ipython {ipython_config.py}. No arquivo de configuração

c.InteractiveShellApp.pylab = 'auto'

Mudei 'auto' para 'qt' e agora vejo gráficos

anon
fonte
5
ou usando "ipython --pylab = qt"
andrew cooke
Isto irá funcionar, mas é apenas uma solução parcial: Se o backend padrão é agg, eu não faço coisa que %pylab inlinevai funcionar, nem gráficos mostram quando você executar scripts diretamente ou seja: python myscript.py. a resposta do unutbu deve corrigi-lo em todos os lugares.
22413 drevicko
8

O que resolveu meu problema foi usar as duas linhas abaixo no caderno ipython na parte superior

%matplotib inline
%pylab inline

E funcionou. Estou usando o Ubuntu16.04 e ipython-5.1

Bhanu Pratap Singh
fonte
Corrija a formatação dos comentários acima ... Obrigado.
Saras Arya
Concluído - Embora este post do blog desconheça o pylab, você terá uma idéia de por que a adição %pylab inlinefaz com que ele funcione.
Bhanu Pratap Singh
2

Eu tive que instalar o matplotlib da fonte para que isso funcionasse. As instruções principais (em http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ ) são:

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

Ao alterar o back-end, como o @unutbu diz, acabei enfrentando muitos problemas com todos os diferentes back-ends também.

Rikki
fonte
1
Trabalhei um tratamento, usei apenas as etapas de instalação do git clone e python, mas quando eu o executo com plt.show () sem problemas.
Steve Steve
2

Adicionar as duas linhas a seguir antes de importar o pylab parece funcionar para mim

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np
Pau
fonte
0

Certifique-se de ter este script de inicialização ativado: (Preferências> Console> Opções avançadas)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Se o PYTHONSTARTUP padrão estiver ativado, você não terá um gráfico interativo

Covich
fonte
0

Semelhante ao @Rikki, resolvi esse problema atualizando matplotlibcom pip install matplotlib --upgrade. Se você não pode atualizar a desinstalação e reinstalação, pode funcionar.

pip uninstall matplotlib
pip install matplotlib
Seanny123
fonte
0

Para mim, o problema acontece se eu simplesmente criar um arquivo vazio no macOS. Adicionando "backend: macosx", ele corrige o problema.matplotlibrc~/.matplotlib

Eu acho que é um bug: se backendnão for especificado no meu matplotlibrc, deve levar o valor padrão.

an0
fonte
0

Depois de executar seu código, inclua:

import pylab as p
p.show()
Shrish Trivedi
fonte
0

Descobri que precisava window = Tk()e depoiswindow.mainloop()

R Keene
fonte
Você pode adicionar um pouco de explicação? Qual é a sua solução diferente das outras?
Ralf Stubner
-2

Para o Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
nanvel
fonte