2010-01-25 11 views
71

Właśnie zainstalowałem matplotlib w systemie Ubuntu 9.10 przy użyciu systemu pakietów synaptic. Jednak kiedy próbuję następujący prosty przykładBrak okna wydruku w matplotlib

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

mam żadnego okna wykresu. Jakieś pomysły, jak wyświetlić okno fabuły?

+7

pylab nie pokazuje domyślnie wykresu, ponieważ rysowanie i stała aktualizacja może być kosztowna. Musisz wykonać wyraźne 'show()'. –

+1

Niektóre oficjalne dokumenty na ten temat: http://matplotlib.org/faq/installing_faq.html#matplotlib-compiled-fine-but-nothing-shows-up-when-i-use-it – stephenbez

Odpowiedz

110

Można wpisać

import pylab 
pylab.show() 

lub lepiej, użyj ipython -pylab.

9

Jakieś błędy pojawiają się? Może to być kwestią braku ustawienia zaplecza. Możesz ustawić go z interpretera Pythona lub pliku konfiguracyjnego (.matplotlib/matplotlibrc) w twoim katalogu domowym.

Aby ustawić backendu w kodzie można zrobić

import matplotlib 
matplotlib.use('Agg') 

gdzie 'dw' to nazwa backend. Które serwery są obecne, zależy od Twojej instalacji i systemu operacyjnego.

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

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

+1

Całkowicie działa, dzięki. Aby było jasne, najprostszą rzeczą do zrobienia (gdy już wiesz, że to działa), jest ustawienie backendu w '.matplotlib/matplotlibrc' na' backend: Agg'. Wtedy nie musisz jawnie "używać" go za każdym razem :) – dsummersl

35

pylab.show() działa ale bloki (trzeba zamknąć okno).

O wiele wygodniejszym rozwiązaniem jest zrobienie pylab.ion() (tryb interaktywny włączony) po uruchomieniu: wszystkie polecenia (odpowiedniki pylab) pyplot.* wyświetlają natychmiast ich wykres. More information on the interactive mode można znaleźć na oficjalnej stronie internetowej.

Ja również drugi pomocą jeszcze bardziej wygodne ipython -pylab (--pylab, w nowszych wersjach), który pozwala pominąć from … import … część (%pylab prace także w nowszych wersjach ipython).

+1

ale musisz najpierw wywołać 'pylab.show()', aby otworzyć nawet figurę. –

+3

@Steve: Z mojego doświadczenia wynika, że ​​to zależy od zaplecza. W systemie Mac OS X ze standardową powłoką Pythona nie muszę wykonywać show() (lub rysowania(), o ile): plot() otwiera nowe okno. – EOL

+1

Ah, okay. Słuszna uwaga. Mam tylko doświadczenie z ipython w Linuksie. –

13

Spróbuj tego:

import matplotlib 
matplotlib.use('TkAgg') 

PRZED importowej pylab

+6

Co to powinno zrobić? –

+2

Teraz działa, dziękuję. – agarie

0

Jeśli napotkasz problem, który pylab.show() zawiesza okno ipython (może to być Mac   OS   X specyficzny; nie jestem pewien), można cmd-c w oknie IPython, przejdź do okna plotowania, a ono się wyrwie.

Wygląda na to, że przyszłe połączenia z numerem pylab.show() nie zatrzymają okna IPython, a jedynie pierwsze połączenie. Niestety, stwierdziłem, że zachowanie okna wykresu/interakcji z programem show() zmienia się za każdym razem, gdy ponownie instaluję matplotlib, więc to rozwiązanie nie zawsze może się utrzymywać.

6

poniżej Fragment kodu działa zarówno Eclipse i powłoce 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() 
+0

Jak wiele innych odpowiedzi wyjaśnia, może to dla ciebie działać w tej chwili, ale wszystko zależy od tego, jak skonfigurowany jest twój backend Matplotlib. – nealmcb

-5

Inną możliwością przy użyciu easy_install jest to, że trzeba wymagać najnowszą wersję matplotlib. Spróbuj:

import pkg_resources 
pkg_resources.require("matplotlib") 

przed importować matplotlib lub któregokolwiek z jego modułów.

+2

To tylko upewnia się, że 'matplotlib' jest zainstalowany, nie wpływa na sposób obsługi okna. – tacaswell

0

Jeśli uruchamiasz IPython za pomocą opcji --pylab, nie powinieneś dzwonić pod numer show() lub draw(). Spróbuj tego:

ipython --pylab=inline 
0

--pylab już nie pracuje dla Jupyter, ale na szczęście możemy dodać wariację w pliku ipython_config.py dostać zarówno pylab jak również autoreload funkcjonalności.

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

Nowoczesne ipython wykorzystuje "--matplotlib" argument z opcjonalnym parametrem zaplecza. Domyślnie jest to "auto", co zwykle jest wystarczająco dobre na komputerach Mac i Windows. Nie testowałem tego na Ubuntu ani żadnej innej dystrybucji Linuksa, ale oczekiwałbym, że zadziała.

ipython --matplotlib 
Powiązane problemy