Brak okna wykresu w matplotlib

90

Właśnie zainstalowałem matplotlib w Ubuntu 9.10 przy użyciu systemu pakietów synaptic. Jednak gdy spróbuję poniższego prostego przykładu

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

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

DR
źródło
8
pylab domyślnie nie wyświetla wykresu, ponieważ rysowanie i ciągłe aktualizowanie może być kosztowne. Musisz zrobić wyraźne show().
Alok Singhal
1
Niektóre oficjalna dokumentacja w tej sprawie: matplotlib.org/faq/...
stephenbez

Odpowiedzi:

139

Możesz pisać

import pylab
pylab.show()

lub lepiej, użyj ipython -pylab.


Ponieważ stosowanie pylab nie jest już zalecane , rozwiązaniem byłoby obecnie

import matplotlib.pyplot as plt

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

plt.show()
Piotr
źródło
38

pylab.show() działa, ale blokuje (musisz zamknąć okno).

Dużo wygodniejszym rozwiązaniem jest zrobienie tego pylab.ion()(włączony tryb interaktywny) na początku: wszystkie (odpowiedniki pylabów) pyplot.*komend natychmiast wyświetlają swój wykres. Więcej informacji na temat trybu interaktywnego można znaleźć na oficjalnej stronie internetowej.

Po drugie, korzystam z jeszcze wygodniejszego ipython -pylab( --pylabw nowszych wersjach), który pozwala na pominięcie from … import …części ( %pylabdziała też w nowszych wersjach IPythona).

Eric O Lebigot
źródło
1
ale musisz pylab.show()najpierw zadzwonić, aby nawet otworzyć figurę.
Steve Tjoa
3
@Steve: z mojego doświadczenia wynika, że ​​to w dużym stopniu zależy od zaplecza. W systemie Mac OS X ze zwykłą powłoką Pythona nie muszę wykonywać show () (ani rysowania (), jeśli o to chodzi): plot () otwiera nowe okno.
Eric O Lebigot
1
Ah, dobrze. Słuszna uwaga. Mam tylko doświadczenie z ipythonem w Linuksie.
Steve Tjoa
draw () nie działa dla mnie, ale pylab.ion () działa. Używam
OSx
To samo dotyczy powłoki Pythona z najnowszą wersją Matplotlib. Zaktualizowałem odpowiedź, dzięki.
Eric O Lebigot
17

Spróbuj tego:

import matplotlib
matplotlib.use('TkAgg') 

PRZED importem pylab

linhares
źródło
11
Co to powinno zrobić?
Nathan Fellman
11

Poniższy fragment kodu działa zarówno w środowisku Eclipse, jak i w powłoce Pythona:

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()
neobot
źródło
Jak wyjaśnia wiele innych odpowiedzi, w tej chwili może to działać dla Ciebie, ale wszystko zależy od konfiguracji zaplecza matplotlib.
nealmcb
9

Pojawiły się jakieś błędy? Może to wynikać z braku ustawienia zaplecza. Możesz ustawić to z interpretera Pythona lub z pliku konfiguracyjnego ( .matplotlib/matplotlibrc) w swoim katalogu domowym.

Aby ustawić zaplecze w kodzie, możesz to zrobić

import matplotlib
matplotlib.use('Agg')

gdzie „Agg” to nazwa zaplecza. To, które backendy są obecne, zależy od instalacji i systemu operacyjnego.

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

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

Matti Lyra
źródło
1
Całkowicie działa, dzięki. Aby było jasne, najłatwiejszą rzeczą do zrobienia (kiedy już wiesz, że to działa) jest ustawienie backendu .matplotlib/matplotlibrcna backend: Agg. Wtedy nie musisz za usekażdym razem wyraźnie jednego :)
dsummersl
2

Nowoczesny IPython używa --matplotlibargumentu „ ” 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 spodziewałbym się, że zadziała.

ipython --matplotlib
calvinvette
źródło
0

Jeśli napotkasz problem pylab.show()polegający na zawieszaniu się okna IPythona (może to być specyficzne dla Mac OS X; nie jestem pewien), możesz użyć polecenia cmd-c w oknie IPythona, przełączyć się na okno wykresu, a ono się wyskoczy.

Najwyraźniej przyszłe wywołania funkcji pylab.show()nie będą zamrażać okna IPythona, tylko pierwsze wywołanie. Niestety, odkryłem, że zachowanie okna wykresu / interakcji z show () zmienia się za każdym razem, gdy ponownie instaluję matplotlib, więc to rozwiązanie może nie zawsze działać.

keflavich
źródło
0

Jeśli uruchamiasz IPython z --pylabopcją, nie powinieneś mieć potrzeby wywoływania show()lub draw(). Spróbuj tego:

ipython  --pylab=inline
Scofield77
źródło
0

--pylabjuż nie działa dla Jupytera , ale na szczęście możemy dodać poprawkę w ipython_config.pypliku, aby uzyskać zarówno funkcje, pylabjak i autoreloadfunkcje.

c.InteractiveShellApp.extensions = ['autoreload', 'pylab']
c.InteractiveShellApp.exec_lines = ['%autoreload 2', '%pylab']
kreskowaty
źródło
0

Jeśli jesteś użytkownikiem Anaconda i Spyder to najlepszym rozwiązaniem dla Ciebie jest:

Narzędzia -> Preferencje -> Konsola Ipython -> Sekcja graficzna

Następnie w sekcji Obsługa grafiki (Matplotlib) :

wybierz dwie dostępne opcje

oraz w zapleczu graficznym :

wybierz opcję Automatycznie

PyMatFlow
źródło
-5

Inną możliwością korzystania z easy_install jest to, że musisz wymagać najnowszej wersji matplotlib. Próbować:

import pkg_resources
pkg_resources.require("matplotlib")

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

ramsey0
źródło
2
To tylko upewnia się, że matplotlibjest zainstalowany, a nie wpływa na sposób obsługi okna.
tacaswell,