Como posso definir o 'backend' em matplotlib em Python?

91

Sou um novo usuário de matplotlib, minha plataforma é Ubuntu 10.04 Python 2.6.5

Este é o meu código

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt 
plt.plot([1,2,3])

O erro é:

/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py:41: UserWarning: 
Your currently selected backend, 'agg' does not support show().
Please select a GUI backend in your matplotlibrc file ('/usr/local/lib/python2.6/dist-packages/matplotlib/mpl-data/matplotlibrc')
or with matplotlib.use()
  (backend, matplotlib.matplotlib_fname()))
  • Instalei a biblioteca de geometria anti-granulação, apt-get install libaggmas não funciona.
  • Tentei usar outro argumento de backend como 'GTK' e 'TkAgg'.
  • Instalei o python-gtk2-devpacote, mas ainda assim o erro está abaixo.
  • Alguém pode me dizer um argumento de back-end executável e sua biblioteca de dependência?

Aqui está o erro:

>>> matplotlib.use('GTK')
>>> import matplotlib.pyplot as plt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/pyplot.py", line 95, in <module>
    new_figure_manager, draw_if_interactive, show = pylab_setup()
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/__init__.py", line 25, in pylab_setup
    globals(),locals(),[backend_name])
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gtk.py", line 28, in <module>
    from matplotlib.backends.backend_gdk import RendererGDK, FigureCanvasGDK 
  File "/usr/local/lib/python2.6/dist-packages/matplotlib/backends/backend_gdk.py", line 29, in <module>
    from matplotlib.backends._backend_gdk import pixbuf_get_pixels_array
ImportError: No module named _backend_gdk
user504909
fonte

Respostas:

93

Seu backend selecionado atualmente, 'agg' não suporta show ().

AGGbackend é para gravar em arquivo, não para renderizar em uma janela. Veja o FAQ de backend no site matplotlib.

ImportError: Nenhum módulo denominado _backend_gdk

Para o segundo erro, talvez sua distribuição matplotlib não esteja compilada com suporte GTK ou você sinta falta do pacote PyGTK. Tente instalá-lo.

Você chama o show()método dentro de um terminal ou aplicativo que tem acesso a um ambiente gráfico?

Experimente outros back-ends de GUI, nesta ordem:

  • TkAgg
  • WX
  • QTAgg
  • QT4Agg
Andrea Spadaccini
fonte
muito obrigado, a equipe errada que fiz foi configurar o matplotlib antes de obter o PyGTK
user504909
1
como um comentário lateral, eu tentaria o QTAgg por último, pois ele visa QT3 e provavelmente será suspenso no meio do prazo.
tacaswell
30

Para sua informação, descobri que precisava colocar matplotlib.use('Agg')primeiro na ordem de importação do Python. Para o que eu estava fazendo (teste de unidade precisava ser sem cabeça), isso significava colocar

import matplotlib
matplotlib.use('Agg')

no topo do meu script de teste mestre. Não precisei mexer em nenhum outro arquivo.

Ben
fonte
Devo fazer a mesma coisa que me incomoda muito. Você já encontrou outra solução elegrant?
QM.py
E descobri que é importante estar no topo (não depois de algumas outras importações). +1.
Ryan
Sim, esta deve ser a primeira coisa absoluta a fazer antes de qualquer outra importação de matplotlib.
JakeCowton
19

Isso também pode ser definido no arquivo de configuração matplotlibrc(conforme explicado na mensagem de erro), por exemplo:

# The default backend; one of GTK GTKAgg GTKCairo GTK3Agg GTK3Cairo
# CocoaAgg MacOSX Qt4Agg Qt5Agg TkAgg WX WXAgg Agg Cairo GDK PS PDF SVG
backend : Agg

Dessa forma, o back-end não precisa ser codificado se o código for compartilhado com outras pessoas. Para mais informações, verifique a documentação .

BenC
fonte
7

Os erros que você postou não estão relacionados. O primeiro é devido a você selecionar um back-end que não se destina ao uso interativo, ou seja, agg. Você ainda pode usar (e deve usar) aqueles para a geração de gráficos em scripts que não requerem interação do usuário.

Se você deseja um ambiente de laboratório interativo, como no Matlab / Pylab, obviamente importaria um back-end que suporte o uso de interface gráfica do usuário, como Qt4Agg (precisa de Qt e AGG), GTKAgg (GTK e AGG) ou WXAgg (wxWidgets e Agg).

Eu começaria tentando usar o WXAgg, fora isso realmente depende de como você instalou o Python e o matplotlib (fonte, pacote etc.)

Jim Brissom
fonte
4

Antes de iniciar o python, você pode fazer no bash

export MPLBACKEND=TkAgg
Friedrich
fonte
3

Você também pode tentar visualizar o gráfico em um navegador.

Use o seguinte:

matplotlib.use('WebAgg')
Grizzle
fonte
2

Eu acertei isso ao tentar compilar python, numpy, scipy, matplotlib em meu próprio VIRTUAL_ENV

Antes de instalar o matplotlib, você deve construir e instalar: pygobject pycairo pygtk

E então faça isso com matplotlib: Antes de construir matplotlib, verifique com 'python ./setup.py build --help' se o backend 'gtkagg' está habilitado. Em seguida, crie e instale

Antes de exportar PKG_CONFIG_PATH = $ VIRTUAL_ENV / lib / pkgconfig

btwe
fonte
2

Para novatos,

matplotlib.pyplot.switch_backend(newbackend)
Ali Erkan
fonte