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?


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()

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


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


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()

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


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

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


0

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

ipython  --pylab=inline

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']

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


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


2
To tylko upewnia się, że matplotlibjest zainstalowany, a nie wpływa na sposób obsługi okna.
tacaswell,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.