matplotlib nie pokazuje moich rysunków, chociaż wywołuję pyplot.show ()

175

Wymagana pomoc dotycząca matplotlib. Tak, nie zapomniałem zadzwonić do pyplot.show ().

$ ipython --pylab

import matplotlib.pyplot as p 
p.plot(range(20), range(20))

Wraca matplotlib.lines.Line2D at 0xade2b2cjako wyjście.

p.show()

Nic się nie wydarzy. Brak komunikatu o błędzie. Brak nowego okna. Nic. Instaluję matplotlibza pomocą pip i nie otrzymałem żadnych komunikatów o błędach.

Detale:

Używam,

  • Ubuntu
  • IPython v0.11
  • Python 2.6.6
  • matplotlib v1.0.1
Baskaya
źródło

Odpowiedzi:

177

Jeśli ustawię mój backend na templatein ~/.matplotlib/matplotlibrc, mogę odtworzyć twoje objawy:

~ / .matplotlib / matplotlibrc:

# backend      : GtkAgg
backend      : template

Zauważ, że plik matplotlibrcmoże nie znajdować się w katalogu ~/.matplotlib/. W tym przypadku poniższy kod pokazuje, gdzie to jest:

>>> import matplotlib
>>> matplotlib.matplotlib_fname()

In [1]: import matplotlib.pyplot as p

In [2]: p.plot(range(20),range(20))
Out[2]: [<matplotlib.lines.Line2D object at 0xa64932c>]

In [3]: p.show()

Jeśli edytujesz ~/.matplotlib/matplotlibrci zmienisz zaplecze na coś podobnego GtkAgg, powinieneś zobaczyć wykres. Możesz wyświetlić listę wszystkich backendów dostępnych na twoim komputerze za pomocą

import matplotlib.rcsetup as rcsetup
print(rcsetup.all_backends)

Powinien zwrócić listę taką jak:

['GTK', 'GTKAgg', 'GTKCairo', 'FltkAgg', 'MacOSX', 'QtAgg', 'Qt4Agg',
'TkAgg', 'WX', 'WXAgg', 'CocoaAgg', 'agg', 'cairo', 'emf', 'gdk', 'pdf',
'ps', 'svg', 'template']

Odniesienie:

unutbu
źródło
2
Próbowałem, ale pojawił się błąd podobny do:ImportError: No module named _backend_gdk
Baskaya
6
Przepraszamy za wiele komentarzy. To działa. Wypróbowałem Qt4Agg i trafiłem. Dzięki :) .. Ostatnia sprawa, gdzie mogę znaleźć domyślny matplotlibrc czy jest jakikolwiek sposób na jego utworzenie?
Baskaya
Przepraszam za nieporządek. Myślę, że znalazłem
Baskaya
8
Ta odpowiedź jest stara, konfiguracja powinna być teraz dostępna ~/.config/matplotlib/matplotlibrc(przynajmniej dla Pythona 3). Właśnie miałem powiązany problem i myślę, że był on spowodowany użyciem matplotlib w Pythonie 2.7, który utworzył ~/.matplotlib/katalog i zatrzymał Python 3 przed wczytaniem konfiguracji ~/.config/matplotlib/. Usunięcie ~/.matplotlib/rozwiązało problem.
naught101
5
6 lat później ten problem nadal istnieje ... Teraz pamiętam, dlaczego nienawidzę Pythona: problem w każdej linii kodu.
pookie
70

Napotkałem dokładnie ten sam problem na Ubuntu 12.04, ponieważ zainstalowałem matplotlib (w ramach virtualenv) używając

pip install matplotlib

Krótko mówiąc, radzę: nie próbuj instalować matplotlib za pomocą pip lub ręcznie; pozwól prawdziwemu menedżerowi pakietów (np. apt-get / synaptic) zainstalować go i wszystkie jego zależności za Ciebie.

Niestety, backendy matplotlib (alternatywne metody rzeczywistego renderowania twoich wykresów) mają różnego rodzaju zależności, z którymi pip nie poradzi sobie. Co gorsza, cicho zawodzi; to znaczy pip install matplotlibwygląda na to, że pomyślnie zainstalował matplotlib. Ale kiedy spróbujesz go użyć (np. pyplot.show()), Nie pojawi się żadne okno wykresu. Wypróbowałem wszystkie różne backendy, które sugerują ludzie w sieci (Qt4Agg, GTK itp.) I wszystkie zawiodły (tj. Kiedy próbowałem zaimportować matplotlib.pyplot, otrzymuję, ImportErrorponieważ próbuje zaimportować brakującą zależność). Następnie zbadałem, jak zainstalować te zależności, ale po prostu chciałem zrezygnować z używania pip (w ramach virtualenv) jako realnego rozwiązania instalacyjnego dla dowolnego pakietu, który ma zależności od pakietów innych niż Python.

Całe to doświadczenie sprawiło, że przeszedłem z powrotem do apt-get / synaptic (tj. Menedżera pakietów Ubuntu), aby zainstalować oprogramowanie takie jak matplotlib. To działało doskonale. Oczywiście oznacza to, że możesz zainstalować tylko w katalogach systemowych, bez dobroci virtualenv, i utkniesz z wersjami, które dystrybuuje Ubuntu, które mogą być daleko w tyle za obecną wersją ...

Christophera Lee
źródło
2
Twoja odpowiedź jest długa na BIT, możesz rozważyć skrócenie dla OP.
theJollySin,
5
Czy próbowałeś tej --system-site-packagesopcji?
Tianyang Li
1
% Christopher Lee Problem z figury nie pokazuje bez błędu / drugiej skargi jest fakt, że domyślne backend kiedy pip installjest agg. Nie jestem pewien dlaczego, ale możesz to zmienić zgodnie z odpowiedzią unutbu. pipma tę główną zaletę, że instaluje aktualną wersję - aptinstaluje przestarzałą wersję. Czasami są poprawki błędów / nowe funkcje, które chcesz / potrzebujesz.
drevicko
2
Po prostu dezaktywacja virtualenvzadziałała! Udało mi się zainstalować matplotlib 1.4 ze źródła w całym systemie (na Ubuntu), ale nie poniżej virtualenv.
osa,
1
A jakie jest rozwiązanie dla tych z nas, którzy utknęli na komputerach roboczych z systemem Windows, którzy nie mogą używać apt-get?
ale19
34

% matplotlib inline

U mnie praca z notatnikiem, dodanie powyższej linii przed działaniem fabuły.

grampus
źródło
Musiałem używać %pylab inlinena moim notebooku, jak zauważył @Bhanu Pratap Singh
Reed Sandberg
10

Dla przyszłego odniesienia,

Napotkałem ten sam problem - pylab nie wyświetlał się pod ipythonem. Problem został rozwiązany przez zmianę pliku konfiguracyjnego ipython {ipython_config.py}. W pliku konfiguracyjnym

c.InteractiveShellApp.pylab = 'auto'

Zmieniłem „auto” na „qt” i teraz widzę wykresy

zaraz
źródło
5
lub używając „ipython --pylab = qt”
andrew cooke
To zadziała, ale jest to tylko częściowe rozwiązanie: jeśli twój domyślny backend to agg, nie sądzę, że %pylab inlinebędzie działać, ani wykresy nie pokażą się, gdy uruchomisz skrypty bezpośrednio, tj python myscript.py. : . Odpowiedź unutbu powinna naprawić to wszędzie.
drevicko
8

To, co rozwiązało mój problem, to po prostu użycie poniższych dwóch wierszy w notatniku ipython u góry

%matplotib inline
%pylab inline

I zadziałało. Używam Ubuntu16.04 i ipython-5.1

Bhanu Pratap Singh
źródło
Popraw formatowanie powyższych komentarzy ... Dzięki.
Saras Arya
Gotowe - chociaż ten post na blogu atakuje Pylab, ale dowiesz się, dlaczego dodanie %pylab inlinesprawia, że ​​działa.
Bhanu Pratap Singh
2

Musiałem zainstalować matplotlib ze źródła, aby to zadziałało. Najważniejsze instrukcje (z http://www.pyimagesearch.com/2015/08/24/resolved-matplotlib-figures-not-showing-up-or-displaying/ ) to:

$ workon plotting
$ pip uninstall matplotlib
$ git clone https://github.com/matplotlib/matplotlib.git
$ cd matplotlib
$ python setup.py install

Zmieniając backend, jak mówi @unutbu, po prostu napotkałem dużo więcej problemów, ponieważ wszystkie różne backendy również nie działały.

Rikki
źródło
1
Udało się, wykorzystałem tylko kroki konfiguracji git clone i python, ale kiedy uruchomię go z plt.show (), żadnych problemów.
Steve
2

Dodanie następujących dwóch wierszy przed zaimportowaniem pylab wydaje mi się działać

import matplotlib
matplotlib.use("gtk")

import sys
import pylab
import numpy as np
Pau
źródło
0

Upewnij się, że masz włączony ten skrypt startowy: (Preferencje> Konsola> Opcje zaawansowane)

/usr/lib/python2.7/dist-packages/spyderlib/scientific_startup.py

Jeśli włączony jest standardowy PYTHONSTARTUP, nie będziesz mieć interaktywnego wykresu

Covich
źródło
0

Podobnie jak @Rikki, rozwiązałem ten problem, aktualizując za matplotlibpomocą pip install matplotlib --upgrade. Jeśli nie możesz uaktualnić, odinstalowanie i ponowna instalacja może działać.

pip uninstall matplotlib
pip install matplotlib
Seanny123
źródło
0

U mnie problem występuje, gdy po prostu utworzę pusty matplotlibrc plik w ~/.matplotlibsystemie macOS. Dodanie „backend: macosx” w nim rozwiązuje problem.

Myślę, że to błąd: jeśli backendnie jest określony w moim matplotlibrc, powinien przyjąć wartość domyślną.

an0
źródło
0

Po uruchomieniu kodu dołącz:

import pylab as p
p.show()
Shrish Trivedi
źródło
0

Odkryłem, że potrzebuję window = Tk()i wtedywindow.mainloop()

R Keene
źródło
Czy możesz dodać trochę wyjaśnienia? Czym Twoje rozwiązanie różni się od innych?
Ralf Stubner,
-2

W przypadku Ubuntu 12.04:

sudo apt-get install python-qt4
virtualenv .env --no-site-packages
source .env/bin/activate
easy_install -U distribute
ln -s /usr/lib/python2.7/dist-packages/PyQt4 .
ln -s /usr/lib/python2.7/dist-packages/sip.so .
pip install matplotlib
nanvel
źródło