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.0
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, sys, types
import nbformat
[13]:
from pygments import highlight
from pygments.lexers import PythonLexer
from pygments.formatters import HtmlFormatter

from IPython.display import display, HTML

formatter = HtmlFormatter()
lexer = PythonLexer()

# publish the CSS for pygments highlighting
display(HTML("""
<style type='text/css'>
%s
</style>
""" % formatter.get_style_defs()
))
[14]:
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("<h4>%s cell</h4>" % cell.cell_type)
        if cell.cell_type == 'code':
            html.append(highlight(cell.source, lexer, formatter))
        else:
            html.append("<pre>%s</pre>" % cell.source)
    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__