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://www.python.org/static/community_logos/python-logo-generic.svg",
)
[2]:
Nicht-eingebettete Bilder¶
Standardmäßig sind Bilddaten eingebettet:
Image ('img_url')
Wenn jedoch
urlalskwargangegeben ist, wird dies als Softlink interpretiert:Image (url='img_url')
embedkann 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("An example of a JavaScript warning displayed by IPython.")',
)
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]:
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]:
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]:
Links zu lokalen Dateien¶
IPython bietet integrierte Klassen zum Generieren von Links zu lokalen Dateien. Erstellt hierzu eine Verknüpfung zu einer einzelnen Datei mit dem FileLink-Objekt:
[10]:
from IPython.display import FileLink, FileLinks
FileLink("magics.ipynb")
[10]:
Alternativ könnt ihr auch eine Liste mit Links zu allen Dateien in einem Verzeichnis generieren, z.B.:
[11]:
FileLinks(".")
[11]:
index.rst
tab-completion-for-modules.png
tab-completion-for-objects.png
tab-completion-for-anything.png
debugging.ipynb
magics.ipynb.license
tab-completion-for-modules.png.license
tab-completion-for-objects.png.license
tab-completion-for-anything.png.license
magics.ipynb
shell.ipynb
display.ipynb
examples.ipynb.license
examples.ipynb
myscript.py
importing.ipynb
shell.ipynb.license
extensions.rst
start.rst
importing.ipynb.license
display.ipynb.license
debugging.ipynb.license
./.ipynb_checkpoints/
importing-checkpoint.ipynb
display-checkpoint.ipynb
./mypackage/
foo.ipynb.license
__init__.py
foo.ipynb
./mypackage/__pycache__/
__init__.cpython-313.pyc
./unix-shell/
index.rst
shell-variables.ipynb.license
create-delete.ipynb
grep-find.ipynb.license
create-delete.ipynb.license
file-system.ipynb
pipes-filters.ipynb
shell-variables.ipynb
pipes-filters.ipynb.license
file-system.ipynb.license
grep-find.ipynb
Notebooks anzeigen¶
[12]:
from pathlib import Path
import nbformat
from IPython.display import display as ipydisplay
from pygments import highlight
from pygments.formatters import HtmlFormatter
from pygments.lexers import PythonLexer
formatter = HtmlFormatter()
lexer = PythonLexer()
# publish the CSS for pygments highlighting
ipydisplay(
HTML(
f"""
<style type='text/css'>
{formatter.get_style_defs()}
</style>
""",
),
)
[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>")
ipydisplay(HTML("\n".join(html)))
show_notebook(Path("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__