Einfügen eines Bildes in das IPython-Notebook-Markdown


216

Ich fange an, mich stark auf die IPython-Notebook-App zu verlassen, um Algorithmen zu entwickeln und zu dokumentieren. Es ist großartig; aber es gibt etwas, das möglich zu sein scheint, aber ich kann nicht herausfinden, wie es geht:

Ich möchte ein lokales Bild in mein (lokales) IPython-Notizbuch einfügen, um die Dokumentation eines Algorithmus zu erleichtern. Ich weiß genug, um so etwas <img src="image.png">zum Abschlag hinzuzufügen , aber das ist ungefähr so ​​weit wie ich weiß . Ich gehe davon aus, dass ich das Bild in das durch 127.0.0.1:8888 (oder ein Unterverzeichnis) dargestellte Verzeichnis stellen könnte, um darauf zugreifen zu können, aber ich kann nicht herausfinden, wo sich dieses Verzeichnis befindet. (Ich arbeite an einem Mac.) Ist es also möglich, das, was ich versuche, ohne allzu große Probleme zu tun?

Antworten:


200

Dateien im Notizbuchverzeichnis sind unter der URL "files /" verfügbar. Wenn es sich also im <img src="files/image.png">Basispfad befindet , ist dies der Fall , und Unterverzeichnisse usw. sind ebenfalls verfügbar: <img src="files/subdir/image.png">usw.

Update : Ab IPython 2.0 wird das files/Präfix nicht mehr benötigt (vgl. Versionshinweise ). Jetzt <img src="image.png">funktioniert die Lösung einfach wie erwartet.


3
Ah, Sie verwenden wahrscheinlich 0,12, nicht wahr? Das Bereitstellen lokaler Dateien ist derzeit nur im Master verfügbar. Und ja, das "Notizbuchverzeichnis" ist das Verzeichnis mit den Notizbüchern (.ipynb-Dateien).
Minrk

107
Warum nicht verwenden, da Sie sich im Abschlag befinden ![caption](files/image.png)?
Kynan

4
@minrk: es funktioniert nicht bei mir. Ich habe "<img src =" k.png ">" gesetzt, aber es wird nichts angezeigt. k.png befindet sich im selben Ordner wie die Notebook-Datei.
Abid Rahman K

4
Bitte lesen Sie die Antwort und Kommentare erneut. Ihre URL beginnt immer mit 'files /'. Wenn Sie sich also k.pngneben Ihrem Notizbuch befinden, lautet die URL src="files/k.png".
Minrk

2
Sie müssen eine Webseite aktualisieren, damit Bilder mit einer bestimmten URL neu geladen werden können.
Minrk

229

Die meisten der bisher gegebenen Antworten gehen in die falsche Richtung und schlagen vor, zusätzliche Bibliotheken zu laden und den Code anstelle von Markup zu verwenden. In Ipython / Jupyter-Notizbüchern ist dies sehr einfach. Stellen Sie sicher, dass sich die Zelle tatsächlich im Markup befindet, und verwenden Sie Folgendes, um ein Bild anzuzeigen:

![alt text](imagename.png "Title")

Ein weiterer Vorteil gegenüber den anderen vorgeschlagenen Methoden besteht darin, dass Sie alle gängigen Dateiformate anzeigen können, einschließlich JPG, PNG und GIF (Animationen).


Neugierig, woher Sie diesen Befehl kennen. Ist es einzigartig für Jupyter oder ist dies eine Sprache (vielleicht Latexformatierung), die Sie in Jupyter verwenden, um das Bild hinzuzufügen?
Alex G

1
@ Alex G, Markdown ist eine Sprache mit einfacher Textformatierungssyntax, die so konzipiert ist, dass sie in HTML und viele andere Formate konvertiert werden kann. Markdown wird häufig verwendet, um Rich Text mit einem Nur-Text-Editor zu erstellen. Schauen Sie sich den folgenden Link an, um die Syntax zu lernen: github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet
Philipp Schwarz

@PhilippSchwarz Gibt es in Ihrem obigen Beispiel einige Optionen, um die Größe des eingefügten Bildes zu steuern? Bei Verwendung des <img...>Tags werden solche Optionen ungefähr so ​​angezeigt <img ... width="480">.
Reb.Cabin

1
Damit hat es nicht funktioniert. Das Notizbuch hat an einem bestimmten Ort gesucht / Notizbücher / <mein hier angehängter Arbeitspfad> - dies ist sicherlich kein Stammverzeichnis - und der lokale Pfad war nicht vorhanden. Ich fand es hilfreich, nur das Notebook- Einfügungsbild zu verwenden, das das Bild als Anhang hinzufügte (das jetzt portabel ist).
Mark

2
Gibt es eine Möglichkeit, diese Methode mit Bilddateien zu verwenden, deren Namen Leerzeichen enthalten?
Zebralamie

78

Ich benutze Ipython 2.0, also nur zwei Zeilen.

from IPython.display import Image
Image(filename='output1.png')

25
Dies ist der richtige Weg, um ein Bild in einer Codezelle anzuzeigen . Die Antwort von minrk ist die richtige Art, ein Bild in einer Markdown- Zelle anzuzeigen .
Mike

3
Mit jupyter notebook 4.2.0 wird das Bild nur angezeigt, wenn ich displayauch anrufe : from IPython.display import Image, display; display(Image(filename='output1.png'))
Matteo T.

21

[Obsolet]

IPython / Jupyter unterstützt jetzt ein Erweiterungsmodul, mit dem Bilder per Kopieren und Einfügen oder per Drag & Drop eingefügt werden können.

https://github.com/ipython-contrib/IPython-notebook-extensions

Die Drag & Drop-Erweiterung scheint in den meisten Browsern zu funktionieren

https://github.com/ipython-contrib/IPython-notebook-extensions/tree/master/nbextensions/usability/dragdrop

Das Kopieren und Einfügen funktioniert jedoch nur in Chrome.


1
Diese Antwort braucht einige positive Stimmen. Nur sehr wenige kennen sich mit Ipython-Erweiterungen aus.
Thoran

habe gerade versucht, Drag'n'Drop in Safari und Chrome, funktioniert nicht für mich (OSX, Py3, alle Updates)
K.-Michael Aye

2
Der zweite Link, den Sie gepostet haben, ist defekt - Erweiterung wird nicht mehr unterstützt?
zthomas.nc

Ich kann die Erweiterung auch nicht mehr finden.
Yerforkferchips

Ja, Jupyter hat sich in den letzten drei Jahren etwas weiterentwickelt und diese Antwort ist ziemlich veraltet.
Mike

17

Ein Bild in Jupyter NB zu bekommen ist eine viel einfachere Operation, als die meisten Leute hier angedeutet haben.

1) Erstellen Sie einfach eine leere Markdown-Zelle. 2) Ziehen Sie die Bilddatei dann per Drag & Drop in die leere Markdown-Zelle.

Der Markdown-Code, mit dem das Bild eingefügt wird, wird angezeigt.

In der Jupyter-Zelle wird beispielsweise eine unten grau hervorgehobene Zeichenfolge angezeigt:

![Venus_flytrap_taxonomy.jpg](attachment:Venus_flytrap_taxonomy.jpg)

3) Führen Sie dann die Markdown-Zelle aus, indem Sie die Umschalt-Eingabetaste drücken. Der Jupyter-Server fügt dann das Bild ein und das Bild wird angezeigt.

Ich verwende Jupyter Notebook Server ist: 5.7.4 mit Python 3.7.0 unter Windows 7.

Das ist so einfach !!


2
Dies ist wirklich die beste Lösung, die ich gefunden habe !!
GCGM

Leider funktioniert diese Methode nicht, wenn Jupyter Notebook Version 6.0 in Google Cloud gehostet wird. Hat jemand eine Problemumgehung, die ohne Administratorrechte funktioniert, abgesehen von der Installation der Drag-and-Drop-Erweiterung?
Rich Lysakowski PhD

13

Ich habe das IPython-Notizbuch in den gleichen Ordner wie das Bild gelegt. Ich benutze Windows. Der Bildname lautet "phuong huong xac dinh.PNG".

In Markdown:

<img src="phuong huong xac dinh.PNG">

Code:

from IPython.display import Image
Image(filename='phuong huong xac dinh.PNG')

1
Dokumentationsreferenz ipython.readthedocs.io/en/stable/api/generated/… , obwohl Markdown verwendet wird ( ![alt text](foo.png "the title")ist imho vorzuziehen, es sei denn, zusätzliche Argumente von api sind erforderlich.
Michael

9

Stellen Sie zunächst sicher, dass Sie sich im Markdown-Bearbeitungsmodell in der ipython-Notizbuchzelle befinden

Dies ist ein alternativer Weg zu der von anderen vorgeschlagenen Methode <img src="myimage.png">:

![title](img/picture.png)

Es scheint auch zu funktionieren, wenn der Titel fehlt:

![](img/picture.png)

Beachten Sie, dass sich keine Zitate im Pfad befinden sollten. Ich bin mir nicht sicher, ob dies für Pfade mit Leerzeichen funktioniert!


1
Für mich wurden Bilder mit Leerzeichen im Namen nicht im Notizbuch gerendert. Ich habe die Leerzeichen entfernt, die ich jetzt sehen kann.
wahnsinnig_sin

9

Die letzte Version des Jupyter-Notizbuchs akzeptiert das native Kopieren / Einfügen von Bildern


Ich bevorzuge diese Option, da sie das Bild in die Notebook-Binärdatei einbettet. Dadurch wird das Notebook schwerer, aber Sie müssen das Bild nicht im relativen Pfad halten.
Tulio Casagrande

8

Wenn Sie das Bild in einer Markdown-Zelle anzeigen möchten, verwenden Sie:

<img src="files/image.png" width="800" height="400">

Wenn Sie das Bild in einer Codezelle anzeigen möchten, verwenden Sie:

from IPython.display import Image
Image(filename='output1.png',width=800, height=400)

In der Markdown-Zelle arbeitet für mich ohne Komma:<img src="files/image.png" width=800 height=400>
Aerijman

Es ist wahr, dass in HTML-Befehlen keine Kommas benötigt werden. siehe mein Update
Seralouk

5

Ändern Sie den Standardblock von "Code" in "Markdown", bevor Sie diesen Code ausführen:

![<caption>](image_filename.png)

Wenn sich die Bilddatei in einem anderen Ordner befindet, können Sie Folgendes tun:

![<caption>](folder/image_filename.png)

4

Für diejenigen, die suchen, wo die Bilddatei auf dem Jupyter-Computer abgelegt werden soll, damit sie vom lokalen Dateisystem angezeigt werden kann.

Ich stecke meine mypic.pngin

/root/Images/mypic.png

(Dies ist der Ordner "Bilder", der im Jupyter-Online-Dateibrowser angezeigt wird.)

In diesem Fall muss ich die folgende Zeile in die Markdown-Zelle einfügen, damit mein Bild im Notizblock angezeigt wird:

![My Title](Images/mypic.png)

2

Die Antwort von minrk ist richtig.

Ich stellte jedoch fest, dass die Bilder in der Druckansicht fehlerhaft waren (auf meinem Windows-Computer, auf dem die Anaconda-Distribution von IPython Version 0.13.2 in einem Chrome-Browser ausgeführt wird).

Die Problemumgehung hierfür bestand darin, <img src="../files/image.png">stattdessen zu verwenden .

Dadurch wurde das Bild sowohl in der Druckansicht als auch in der normalen iPython-Bearbeitungsansicht korrekt angezeigt.

UPDATE: Ab meinem Upgrade auf iPython v1.1.0 ist diese Problemumgehung nicht mehr erforderlich, da die Druckansicht nicht mehr vorhanden ist. Tatsächlich müssen Sie diese Problemumgehung vermeiden, da das Tool nbconvert die Dateien nicht finden kann.


-3

Sie finden Ihr aktuelles Arbeitsverzeichnis mit dem Befehl 'pwd' in jupyter notebook ohne Anführungszeichen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.