Objekte anzeigen mit display

IPython kann Objekte anzeigen wie z.B. HTML, JSON, PNG, JPEG, SVG und Latex.

Bilder

Um Bilder (JPEG, PNG) in IPython und Notebooks anzuzeigen, könnt ihr die Image-Klasse verwenden:

[1]:
from IPython.display import Image


Image("https://www.python.org/images/python-logo.gif")
[1]:
<IPython.core.display.Image object>
[2]:
from IPython.display import SVG


SVG(
    "https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg"
)
[2]:
../../_images/workspace_ipython_display_3_0.svg

Nicht-eingebettete Bilder

  • Standardmäßig sind Bilddaten eingebettet:

    Image ('img_url')
    
  • Wenn jedoch url als kwarg angegeben ist, wird dies als Softlink interpretiert:

    Image (url='img_url')
    
  • embed kann jedoch auch explizit angegeben werden:

    Image (url='img_url', embed = True)
    

HTML

Python-Objekte können HTML-Repräsentationen deklarieren, die in einem Notebook angezeigt werden:

[3]:
from IPython.display import HTML
[4]:
%%html
<ul>
    <li>foo</li>
    <li>bar</li>
</ul>
  • foo
  • bar

Javascript

Mit Notebooks können Objekte auch eine JavaScript-Darstellung deklarieren. Dies ermöglicht dann z.B. Datenvisualisierungen mit Javascript-Bibliotheken wie d3.js.

[5]:
from IPython.display import Javascript


welcome = Javascript(
    'alert("Dies ist ein Beispiel für eine durch IPython angezeigte Javascript-Warnung.")'
)
display(welcome)

Für umfangreicheres Javascript könnt ihr auch die %%javascript-Syntax verwenden.

LaTeX

IPython.display verfügt außerdem über eine integrierte Unterstützung für die Anzeige von mathematischen Ausdrücken, die in LaTeX gesetzt sind und im Browser mit MathJax gerendert werden:

[6]:
from IPython.display import Math


Math(r"F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx")
[6]:
$\displaystyle F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k} dx$

Bei der Latex-Klasse müsst ihr die Begrenzungen selbst angeben. Auf diese Weise könnt ihr jedoch auch andere LaTeX-Modi verwenden, wie z.B. eqnarray:

[7]:
from IPython.display import Latex


Latex(
    r"""\begin{eqnarray}
\nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\
\end{eqnarray}"""
)
[7]:
\begin{eqnarray} \nabla \times \vec{\mathbf{B}} -\, \frac1c\, \frac{\partial\vec{\mathbf{E}}}{\partial t} & = \frac{4\pi}{c}\vec{\mathbf{j}} \\ \end{eqnarray}

Audio

IPython ermöglicht auch das interaktive Arbeiten mit Sounds. Mit der display.Audio-Klasse könnt ihr ein Audio-Control erstellen, das in das Notebook eingebettet ist. Die Schnittstelle ist analog zu denjenigen der Image-Klasse. Alle vom Browser unterstützten Audioformate können verwendet werden.

[8]:
from IPython.display import Audio

Im folgenden werden wir die Sinusfunktion eines NumPy-Array als Audiosignal ausgeben. Dabei normalisiert und codiert die Audio-Klasse die Daten und bettet das resultierende Audio in das Notebook ein.

[9]:
import numpy as np


f = 500.0
rate = 8000
L = 3
times = np.linspace(0, L, rate * L)
signal = np.sin(f * times)

Audio(data=signal, rate=rate)
[9]:

Notebooks anzeigen

[12]:
import os
import sys
import types

import nbformat

from IPython.display import HTML, display
from pygments import highlight
from pygments.formatters import HtmlFormatter
from pygments.lexers import PythonLexer


formatter = HtmlFormatter()
lexer = PythonLexer()

# publish the CSS for pygments highlighting
display(
    HTML(
        """
<style type='text/css'>
%s
</style>
"""
        % formatter.get_style_defs()
    )
)
[13]:
def show_notebook(fname):
    """display a short summary of the cells of a notebook"""
    nb = nbformat.read(fname, as_version=4)
    html = []
    for cell in nb.cells:
        html.append(f"<h4>{cell.cell_type} cell</h4>")
        if cell.cell_type == "code":
            html.append(highlight(cell.source, lexer, formatter))
        else:
            html.append(f"<pre>{cell.source}</pre>")
    display(HTML("\n".join(html)))


show_notebook(os.path.join("mypackage/foo.ipynb"))

markdown cell

# `foo.ipynb`

code cell

def bar():
    return "bar"

code cell

def has_ip_syntax():
    listing = !ls
    return listing

code cell

def whatsmyname():
    return __name__