Jak sprawić, by notebook IPython działał matplotlib w tekście


830

Próbuję używać notesu IPython w systemie MacOS X z Python 2.7.2 i IPython 1.1.0.

Nie mogę uzyskać grafiki matplotlib, aby wyświetlała się w linii.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

Próbowałem również %pylab inlinei argumenty wiersza polecenia ipython, --pylab=inlineale to nie ma znaczenia.

x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

Zamiast grafiki liniowej otrzymuję to:

<matplotlib.figure.Figure at 0x110b9c450>

I matplotlib.get_backend()pokazuje, że mam 'module://IPython.kernel.zmq.pylab.backend_inline'backend.


fragment kodu nie powinien generować, <matplotlib.figure.Figure at 0x110b9c450>ale <matplotlib.text.Text at 0x94f9320>(ponieważ ostatni wiersz wypisuje tytuł). W każdym razie, Twój kod (z% matplotlib inline i plt.show ()) działa zgodnie z oczekiwaniami na windows
Joaquin

Dzięki za te sugestie, ale dla mnie nie działają. Nadal otrzymuję powyższy wynik bez grafiki liniowej. Czy masz jakieś wskazówki dotyczące rozwiązywania problemów?
Ian Fiske

nie wiem. Ten sam python, ten sam ipython (i ten sam backend), ale w systemie Windows i działa ... Przypuszczam, że fabuła działa dla ciebie, gdy nie jest wbudowana, prawda?
joaquin

2
bez tego %matplotlib inlinejądro pozostaje zajęte na stałe i nie otrzymuję żadnych danych wyjściowych. To musi zostać zabite. Próbuje użyć MacOSXbackendu, ale chyba z jakiegoś powodu nie można go otworzyć. Gdy nie używasz notebooka ipython, backend MacOSX dla matplotlib działa dobrze.
Ian Fiske

1
Miałem identyczny objaw, ale okazało się, że zainstalowałem 32-bitową wersję Canopy na OSX 10.8. Naprawiono go podczas ponownej instalacji w wersji 64-bitowej.
Vicky T

Odpowiedzi:


1129

Użyłem %matplotlib inlinew pierwszej komórce notebooka i działa. Myślę, że powinieneś spróbować:

%matplotlib inline

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

Możesz również zawsze uruchomić wszystkie jądra IPython domyślnie w trybie wbudowanym, ustawiając następujące opcje konfiguracji w plikach konfiguracyjnych:

c.IPKernelApp.matplotlib=<CaselessStrEnum>
  Default: None
  Choices: ['auto', 'gtk', 'gtk3', 'inline', 'nbagg', 'notebook', 'osx', 'qt', 'qt4', 'qt5', 'tk', 'wx']
  Configure matplotlib for interactive use with the default matplotlib backend.

7
Oznaczę to jako właściwą odpowiedź. Alternatywa --pylab inlinedziała, ale wyświetla następujące ostrzeżenie: Uruchomienie wszystkich jąder w trybie pylab nie jest zalecane i zostanie wyłączone w przyszłej wersji. Zamiast tego użyj magii% matplotlib, aby włączyć matplotlib. pylab implikuje wiele importów, które mogą mieć mylące skutki uboczne i szkodzić odtwarzalności twoich notatników.
mpavlov

1
@ eNord9 @mightwolf: Uczę się korzystać z iPython (i programowania Python zamiast Matlab); co import matplotlib' do versus importuje matplotlib jako [name] '? Wybacz za uproszczony komentarz
TSGM

1
@ eNord9 @mightwolf: a także jak to porównać do `z importu matplotlib mpl '.
TSGM

2
@TSGM Najlepsze wytłumaczenie, jakie widziałem dla twojego pytania to: effbot.org/zone/import-confusion.htm
mpavlov

Dzięki @ eNord9. Właśnie przetestowałem twoje polecenia, ponieważ minęło trochę czasu od aktualizacji. Teraz wszystko działa dobrze w Pythonie 2.7.9 i IPython 3.1.0.
Ian Fiske

215

Jeśli twoja wersja matplotlib jest wyższa niż 1.4, możesz również użyć

IPython 3.x i nowszy

%matplotlib notebook

import matplotlib.pyplot as plt

starsza wersja

%matplotlib nbagg

import matplotlib.pyplot as plt

Oba uaktywnią backend nbagg , który umożliwia interaktywność.

Przykładowa fabuła z zapleczem nbagg


To chyba nie działa %config InlineBackend.figure_format='retina'. Masz pomysł, jak uzyskać interaktywne dane Retina?
orome

Hmm ... Naprawdę nie mam zbyt dużej wiedzy na temat postaci siatkówki. Jedyną rzeczą, na którą natknąłem się, był ten link , ale może on być przestarzały. Jeśli więcej osób zastanawia się nad tym samym, łączę twoje SO pytanie tutaj i życzę powodzenia z odpowiedziami tam. Najlepsze
Løiten,

31
Ta odpowiedź jest niedoceniana. %matplotlib notebookzapewnia lepszą wizualizację niż %matplotlib inline.
Hieu

9
używanie %matplotlib notebooknie działa (rodzaj pokazuje coś, a następnie puste) na jupyter notebook 4.1.1 / ubuntu 16.04 / chrome, %matplotlib inlinewyświetla obrazy, ale pojawiają się po tekście znacznika, a nie dosłownie „w linii”.
Michael

6
Jeśli spróbujesz %matplotlib inlinenajpierw, a następnie przełączysz na %matplotlib notebook, możesz otrzymać pusty wynik. Uruchom ponownie jądro i uruchom ponownie.
Czechnology


24

Użyj %pylab inlinemagicznego polecenia.


14
Już nie: „ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Usunięto obsługę określania opcji --pylab w wierszu poleceń. [E 15: 01: 18.182 NotebookApp] Proszę używać %pylab inlinelub %matplotlib inlinew samym notatniku. „
Dave X

14

Aby domyślnie wstawić matplotlib w Jupyter (IPython 3):

  1. Edytuj plik ~/.ipython/profile_default/ipython_config.py

  2. Dodaj linię c.InteractiveShellApp.matplotlib = 'inline'

Pamiętaj, że dodanie tego wiersza do ipython_notebook_config.pynie działałoby. W przeciwnym razie działa dobrze z Jupyter i IPython 3.1.0



7

Znalazłem obejście, które jest całkiem satysfakcjonujące. Zainstalowałem Anaconda Python i teraz działa to dla mnie od razu po wyjęciu z pudełka.


5

Zrobiłem instalację anakondy, ale Matplotlib nie knuje

Kiedy to zrobiłem, zaczyna knuć

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  

2

Możesz zasymulować ten problem z pomyłką składniową, jednak %matplotlib inlineto nie rozwiąże problemu.

Najpierw przykład właściwego sposobu utworzenia fabuły. Wszystko działa zgodnie z oczekiwaniami dzięki importowi i magii dostarczanej przez eNord9 .

df_randNumbers1 = pd.DataFrame(np.random.randint(0,100,size=(100, 6)), columns=list('ABCDEF'))

df_randNumbers1.ix[:,["A","B"]].plot.kde()

Pozostawiając ()jednak koniec typu wykresu, otrzymujesz nieco niejednoznaczny błąd.

Błędny kod:

df_randNumbers1.ix[:,["A","B"]].plot.kde

Przykładowy błąd:

<bound method FramePlotMethods.kde of <pandas.tools.plotting.FramePlotMethods object at 0x000001DDAF029588>>

Poza tym komunikatem o jednym wierszu nie ma śladu stosu ani innego oczywistego powodu, aby sądzić, że popełniłeś błąd składniowy. Fabuła nie jest drukowana.


To nie jest błąd składni - bez ()celu wywołania kde , ipython mówi ci to, co kde jest , a mianowicie sposób związany. W rzeczywistości z punktu widzenia iPython wcale nie jest to „błąd”, dlatego nie ma śladu stosu.
Kyle Strand

1
@KyleStrand Thanks. Po ponownym przeczytaniu mojego postu powinienem powiedzieć: „Myślałem, że miałem problem z tym, że moje wykresy nie wyświetlają się w linii za pomocą %matplotlib inlinepolecenia. Naprawdę zapomniałem po prostu wstawić () na końcu typu wykresu. Więc jeśli wszystko inne zawiedzie, popatrz na swoje nawiasy pod kątem błędu. ”
Blake M

1

Miałem ten sam problem, kiedy uruchamiałem polecenia drukowania w osobnych komórkach w Jupyter:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         <Figure size 432x288 with 0 Axes>                      #this might be the problem
In [4]:  ax = fig.add_subplot(1, 1, 1)
In [5]:  ax.scatter(x, y)
Out[5]:  <matplotlib.collections.PathCollection at 0x12341234>  # CAN'T SEE ANY PLOT :(
In [6]:  plt.show()                                             # STILL CAN'T SEE IT :(

Problem został rozwiązany przez połączenie poleceń drukowania w jedną komórkę:

In [1]:  %matplotlib inline
         import matplotlib
         import matplotlib.pyplot as plt
         import numpy as np
In [2]:  x = np.array([1, 3, 4])
         y = np.array([1, 5, 3])
In [3]:  fig = plt.figure()
         ax = fig.add_subplot(1, 1, 1)
         ax.scatter(x, y)
Out[3]:  <matplotlib.collections.PathCollection at 0x12341234>
         # AND HERE APPEARS THE PLOT AS DESIRED :)
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.