Sem janela de plotagem em matplotlib


89

Acabei de instalar o matplotlib no Ubuntu 9.10 usando o sistema de pacotes sinápticos. No entanto, quando tento o seguinte exemplo simples

>>> from pylab import plot;
>>> plot([1,2,3],[1,2,3])
[<matplotlib.lines.Line2D object at 0x9aa78ec>]

Não recebo nenhuma janela de plotagem. Alguma ideia de como mostrar a janela do enredo?


8
O pylab não mostra o gráfico por padrão, já que desenhar e atualizar constantemente podem ser caros. Você precisa fazer um explícito show().
Alok Singhal

1
Alguma documentação oficial sobre este problema: matplotlib.org/faq/…
stephenbez

Respostas:


138

Você pode digitar

import pylab
pylab.show()

ou melhor, use ipython -pylab.


Como o uso de pylab não é mais recomendado , a solução hoje seria

import matplotlib.pyplot as plt

plt.plot([1,2,3])

plt.show()

38

pylab.show() funciona, mas bloqueia (você precisa fechar a janela).

Uma solução muito mais conveniente é fazer pylab.ion()(modo interativo ativado) quando você inicia: todos (os equivalentes de pylab de) pyplot.*comandos exibem seu gráfico imediatamente. Mais informações sobre o modo interativo podem ser encontradas no site oficial.

Eu também uso o ainda mais conveniente ipython -pylab( --pylab, nas versões mais recentes), que permite pular a from … import …parte ( %pylabfunciona também nas versões mais recentes do IPython).


1
mas você precisa ligar pylab.show()primeiro para abrir uma figura.
Steve Tjoa

3
@Steve: minha experiência é que isso depende fortemente do back-end. No Mac OS X com o shell Python normal, não preciso fazer show () (ou draw (), por falar nisso): plot () abre uma nova janela.
Eric O Lebigot

1
Ah ok. Bom ponto. Só tenho experiência com ipython no Linux.
Steve Tjoa

draw () não funciona para mim, mas pylab.ion () funciona. Estou usando OSx
user1506145

A mesma coisa aqui no shell Python com o Matplotlib mais recente. Eu atualizei minha resposta, obrigado.
Eric O Lebigot


11

O snippet de código abaixo funciona no Eclipse e no shell Python:

import numpy as np
import matplotlib.pyplot as plt

# Come up with x and y
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# Just print x and y for fun
print x
print y

# Plot the x and y and you are supposed to see a sine curve
plt.plot(x, y)

# Without the line below, the figure won't show
plt.show()

Como muitas outras respostas esclarecem, isso pode funcionar para você no momento, mas tudo depende de como o back-end do matplotlib está configurado.
nealmcb

9

Algum erro aparece? Isso pode ser um problema de não ter definido o back-end. Você pode configurá-lo a partir do interpretador Python ou de um arquivo de configuração ( .matplotlib/matplotlibrc) em seu diretório inicial.

Para definir o back-end em código, você pode fazer

import matplotlib
matplotlib.use('Agg')

onde 'Agg' é o nome do back-end. Quais back-ends estão presentes depende de sua instalação e sistema operacional.

http://matplotlib.sourceforge.net/faq/installing_faq.html#backends

http://matplotlib.org/users/customizing.html


1
Funciona totalmente, obrigado. Para ser claro, a coisa mais simples a fazer (depois de saber que está funcionando, é claro) é definir o backend .matplotlib/matplotlibrcpara backend: Agg. Então você não precisa explicitamente useum sempre :)
dsummersl

2

O IPython moderno usa o --matplotlibargumento " " com um parâmetro de back-end opcional. O padrão é "automático", que geralmente é bom o suficiente no Mac e no Windows. Não testei no Ubuntu ou em qualquer outra distribuição Linux, mas espero que funcione.

ipython --matplotlib

0

Se você encontrar um problema que pylab.show()congela a janela IPython (pode ser específico do Mac OS X; não tenho certeza), você pode cmd-c na janela IPython, alternar para a janela de plotagem e ela irá quebrar.

Aparentemente, chamadas futuras para pylab.show()não congelarão a janela IPython, apenas a primeira chamada. Infelizmente, descobri que o comportamento da janela de plotagem / interações com show () muda toda vez que eu reinstalo o matplotlib, portanto, essa solução pode nem sempre ser válida.


0

Se você estiver iniciando o IPython com a --pylabopção, não precisará chamar show()ou draw(). Experimente isto:

ipython  --pylab=inline

0

--pylabnão funciona mais para o Jupyter , mas felizmente podemos adicionar um ajuste no ipython_config.pyarquivo para obter as funcionalidades pylabe também as autoreloadfuncionalidades.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']

0

Se você é usuário do Anaconda e do Spyder, a melhor solução para você é:

Ferramentas -> Preferências -> console Ipython -> Seção Gráfica

Em seguida, na seção Suporte para gráficos (Matplotlib) :

selecione duas opções disponíveis

e no Backend gráfico :

selecione Automático


-5

Outra possibilidade ao usar easy_install é que você precisa exigir a versão mais recente do matplotlib. Experimentar:

import pkg_resources
pkg_resources.require("matplotlib")

antes de importar matplotlib ou qualquer um de seus módulos.


2
Isso apenas garante que matplotlibestá instalado, não afeta a forma como o manuseio da janela é feito.
tacaswell
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.