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.

Ian Fiske
źródło
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.
eNord9
źródło
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

Løiten
źródło
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
91

Ctrl + Enter

%matplotlib inline

Magiczna linia: D

Zobacz: Rysowanie za pomocą Matplotlib .

CodeFarmer
źródło
1
@BradleyKreider Jeszcze nie żyje. Możesz też odwiedzić ipython repo na github, przejść do folderu „example”, znaleźć notes „Plotting with Matplotlib”.
CodeFarmer
24

Użyj %pylab inlinemagicznego polecenia.

foobarbecue
źródło
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

Włodzimierz
źródło
10

Muszę się zgodzić z foobarbecue (nie mam wystarczającej liczby recs, aby móc po prostu wstawić komentarz pod jego postem):

Teraz zaleca się, aby notatnik Python nie był uruchamiany z argumentem --pylab, a zdaniem Fernando Pereza (twórcy ipythonnb) %matplotlib inlinepowinno być początkowe polecenie notebooka.

Zobacz tutaj: http://nbviewer.ipython.org/github/ipython/ipython/blob/1.x/examples/notebooks/Part%203%20-%20Plotting%20with%20Matplotlib.ipynb

szufelka
źródło
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.

Ian Fiske
źródło
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  
Raymond
źródło
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.

Blake M.
źródło
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 :)
krubo
źródło