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.