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__