So machen Sie IPython Notebook Matplotlib Plot Inline

831

Ich versuche, IPython Notebook unter MacOS X mit Python 2.7.2 und IPython 1.1.0 zu verwenden.

Ich kann keine Matplotlib-Grafiken inline anzeigen lassen.

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

Ich habe auch versucht %pylab inlineund die ipython-Befehlszeilenargumente, --pylab=inlineaber das macht keinen Unterschied.

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

Anstelle von Inline-Grafiken bekomme ich Folgendes:

<matplotlib.figure.Figure at 0x110b9c450>

Und matplotlib.get_backend()zeigt, dass ich das 'module://IPython.kernel.zmq.pylab.backend_inline'Backend habe.

Ian Fiske
quelle
Ihr Code - Snippet sollte nicht produzieren , <matplotlib.figure.Figure at 0x110b9c450>aber <matplotlib.text.Text at 0x94f9320>(weil Ihre letzte Zeile einen Titel gedruckt wird ). Wie auch immer, Ihr Code (mit% matplotlib inline und plt.show ()) funktioniert wie erwartet unter Windows
Joaquin
Vielen Dank für diese Vorschläge, aber sie funktionieren nicht für mich. Ich erhalte immer noch die obige Ausgabe ohne Inline-Grafiken. Haben Sie Ratschläge zur Fehlerbehebung?
Ian Fiske
keine Ahnung. Dieselbe Python, dieselbe Ipython (und dasselbe Backend), aber unter Windows, und es funktioniert ... Ich nehme an, die Handlung funktioniert für Sie, wenn Sie nicht inline sind, oder?
Joaquin
2
Ohne das %matplotlib inlinebleibt der Kernel permanent beschäftigt und ich bekomme keine Ausgabe. Es muss getötet werden. Dies versucht, das MacOSXBackend zu verwenden, aber ich denke, es kann aus irgendeinem Grund nicht geöffnet werden. Wenn Sie kein ipython-Notebook verwenden, funktioniert das MacOSX-Backend für matplotlib einwandfrei.
Ian Fiske
1
Ich hatte ein identisches Symptom, aber es stellte sich heraus, dass ich eine 32-Bit-Version von Canopy unter OSX 10.8 installiert hatte. Die Neuinstallation mit der 64-Bit-Version hat das Problem behoben.
Vicky T

Antworten:

1130

Ich habe %matplotlib inlinein der ersten Zelle des Notebooks verwendet und es funktioniert. Ich denke, Sie sollten versuchen:

%matplotlib inline

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

Sie können auch alle IPython-Kernel standardmäßig im Inline-Modus starten, indem Sie die folgenden Konfigurationsoptionen in Ihren Konfigurationsdateien festlegen:

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
quelle
7
Ich würde dies als die richtige Antwort markieren. Die Alternative --pylab inlinefunktioniert, begrüßt Sie jedoch mit der folgenden Warnung: Das Starten aller Kernel im Pylab-Modus wird nicht empfohlen und wird in einer zukünftigen Version deaktiviert. Bitte verwenden Sie die% matplotlib-Magie, um stattdessen matplotlib zu aktivieren. Pylab impliziert viele Importe, die verwirrende Nebenwirkungen haben und die Reproduzierbarkeit Ihrer Notebooks beeinträchtigen können.
mpavlov
1
@ eNord9 @mightwolf: Ich lerne, iPython (und Python-Programmierung anstelle von Matlab) zu verwenden. Was bedeutet der import matplotlib' do versus Import von matplotlib als [Name]? Verzeihen Sie für vereinfachenden Kommentar
TSGM
1
@ eNord9 @mightwolf: und wie ist das im Vergleich zu "from matplotlib import mpl"?
TSGM
2
@TSGM Die beste Erklärung, die ich für Ihre Frage gesehen habe, ist: effbot.org/zone/import-confusion.htm
mpavlov
Danke @ eNord9. Ich habe gerade Ihre Befehle getestet, seit es eine Weile her ist, mit Updates und allem. Jetzt funktioniert alles gut unter Python 2.7.9 und IPython 3.1.0.
Ian Fiske
216

Wenn Ihre matplotlib-Version über 1.4 liegt, können Sie sie auch verwenden

IPython 3.x und höher

%matplotlib notebook

import matplotlib.pyplot as plt

ältere Versionen

%matplotlib nbagg

import matplotlib.pyplot as plt

Beide aktivieren das nbagg-Backend , das Interaktivität ermöglicht.

Beispielplot mit dem nbagg-Backend

Løiten
quelle
Dies scheint nicht zu funktionieren %config InlineBackend.figure_format='retina'. Irgendeine Idee, wie man interaktive Retina-Figuren bekommt?
Orome
Hmm ... Ich habe nicht wirklich viel Erfahrung mit Netzhautfiguren. Das einzige, worauf ich gestoßen bin, war dieser Link , aber er ist möglicherweise veraltet. Wenn sich mehr Leute darüber wundern, verknüpfe ich Ihre SO-Frage hier und wünsche Ihnen viel Glück mit den Antworten dort. Beste
Løiten
31
Diese Antwort wird unterschätzt. %matplotlib notebookbietet die bessere Visualisierung als %matplotlib inline.
Hieu
9
Verwenden %matplotlib notebookfunktioniert nicht (zeigt etwas, dann leer) auf Jupyter Notebook 4.1.1 / Ubuntu 16.04 / Chrome, %matplotlib inlinezeigt Bilder, aber sie kommen nach dem Markdown-Text, nicht wörtlich "Inline".
Michael
6
Wenn Sie es %matplotlib inlinezuerst versucht haben und dann zu wechseln %matplotlib notebook, erhalten Sie möglicherweise ein leeres Ergebnis. Starten Sie den Kernel neu und führen Sie ihn erneut aus.
Czechnology
91

Ctrl + Enter

%matplotlib inline

Magische Linie: D.

Siehe: Plotten mit Matplotlib .

CodeFarmer
quelle
1
@BradleyKreider Noch nicht tot. Alternativ können Sie ipython repo auf github besuchen, in den Ordner 'example' gehen und das Notizbuch 'Plotten mit Matplotlib' finden.
CodeFarmer
24

Verwenden Sie den %pylab inlinemagischen Befehl.

Foobarbecue
quelle
14
Nicht mehr: "ipython notebook --pylab inline [E 15: 01: 18.182 NotebookApp] Die Unterstützung für die Angabe von --pylab in der Befehlszeile wurde entfernt. [E 15: 01: 18.182 NotebookApp] Bitte verwenden Sie %pylab inlineoder %matplotlib inlineim Notebook selbst. ""
Dave X
14

So machen Sie matplotlib in Jupyter (IPython 3) standardmäßig inline:

  1. Datei bearbeiten ~/.ipython/profile_default/ipython_config.py

  2. Zeile hinzufügen c.InteractiveShellApp.matplotlib = 'inline'

Bitte beachten Sie, dass das Hinzufügen dieser Zeile zu ipython_notebook_config.pynicht funktionieren würde. Ansonsten funktioniert es gut mit Jupyter und IPython 3.1.0

volodymyr
quelle
10

Ich muss foobarbecue zustimmen (ich habe nicht genug Recs, um einfach einen Kommentar unter seinen Beitrag einfügen zu können):

Es wird jetzt empfohlen, das Python-Notizbuch nicht mit dem Argument --pylabzu starten, und laut Fernando Perez (Erfinder von ipythonnb) %matplotlib inlinesollte dies der erste Notizbuchbefehl sein.

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

thescoop
quelle
7

Ich habe eine Problemumgehung gefunden, die ziemlich zufriedenstellend ist. Ich habe Anaconda Python installiert und dies funktioniert jetzt sofort für mich.

Ian Fiske
quelle
5

Ich habe die Anaconda installiert, aber Matplotlib plant nicht

Es beginnt zu zeichnen, wenn ich das getan habe

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline  
Raymond
quelle
2

Sie können dieses Problem mit einem Syntaxfehler simulieren, das Problem wird jedoch %matplotlib inlinenicht behoben.

Zunächst ein Beispiel für den richtigen Weg zum Erstellen eines Diagramms. Mit den von eNord9 gelieferten Importen und der Magie funktioniert alles wie erwartet .

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

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

Wenn ()Sie jedoch das Ende des Plottyps weglassen, erhalten Sie einen etwas mehrdeutigen Fehler.

Fehlerhafter Code:

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

Beispielfehler:

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

Abgesehen von dieser einzeiligen Nachricht gibt es keine Stapelverfolgung oder einen anderen offensichtlichen Grund zu der Annahme, dass Sie einen Syntaxfehler gemacht haben. Der Plot wird nicht gedruckt.

Blake M.
quelle
Dies ist kein Syntaxfehler - ohne das berufen , ipython sagt Ihnen , was ist , nämlich eine gebundene Methode. Aus Sicht von iPython ist dies also überhaupt kein "Fehler", weshalb es keine Stapelverfolgung gibt. () kdekde
Kyle Strand
1
@ KyleStrand Danke. Nachdem ich meinen Beitrag noch einmal gelesen hatte, hätte ich sagen sollen: "Ich dachte, ich hätte das Problem, dass meine Plots nicht mit dem %matplotlib inlineBefehl inline angezeigt werden . Wirklich, ich habe nur vergessen, () am Ende des Plottyps zu setzen. Also wenn Alles andere schlägt fehl. Sehen Sie in Ihren Klammern nach einem Fehler. "
Blake M
1

Ich hatte das gleiche Problem, als ich die Plotbefehle in separaten Zellen in Jupyter ausführte:

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

Das Problem wurde gelöst, indem die Plotbefehle in einer einzigen Zelle zusammengeführt wurden:

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
quelle