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

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:


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 ...


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.


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


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


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.


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

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


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

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.



0

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.