{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Show objects with `display`\n", "\n", "IPython can display objects such as `HTML`, `JSON`, `PNG`, `JPEG`, `SVG` and `Latex`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Images\n", "\n", "To display images (`JPEG`, `PNG`) in IPython and notebooks, you can use the `Image` class:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/gif": "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", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image('https://www.python.org/images/python-logo.gif')" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", " \n", " \n", " \n", " image/svg+xml\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "" ], "text/plain": [ "" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import SVG\n", "SVG('https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Non-embedded images\n", "\n", "* By default, image data is embedded:\n", "\n", " ```\n", " Image ('img_url')\n", " ```\n", "\n", "* However, if the `url` is given as `kwarg`, this is interpreted as a soft link:\n", "\n", " ```\n", " Image (url='img_url')\n", " ```\n", "\n", "* `embed` can also be specified explicitly:\n", "\n", " ```\n", " Image (url='img_url', embed = True)\n", " ```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## HTML\n", "\n", "Python objects can declare HTML representations to be displayed in a notebook:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from IPython.display import HTML" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%html\n", "
    \n", "
  • foo
  • \n", "
  • bar
  • \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Javascript\n", "\n", "With notebooks, objects can also declare a JavaScript representation. This enables for example data visualisations with Javascript libraries like [d3.js](https://d3js.org/)." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "application/javascript": [ "alert(\"This is an example of a Javascript warning displayed by IPython.\")" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from IPython.display import Javascript\n", "\n", "\n", "welcome = Javascript(\n", " 'alert(\"This is an example of a Javascript warning displayed by IPython.\")'\n", ")\n", "display(welcome)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For more extensive Javascript you can also use the `%%javascript` syntax." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## LaTeX\n", "\n", "`IPython.display` also has built-in support for displaying mathematical expressions set in LaTeX and rendered in the browser with [MathJax](https://www.mathjax.org/):" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$\\displaystyle F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx$" ], "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Math\n", "\n", "\n", "Math(r\"F(k) = \\int_{-\\infty}^{\\infty} f(x) e^{2\\pi i k} dx\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the `Latex` class you have to specify the limits yourself. In this way, however, you can also use other LaTeX modes, such as `eqnarray`:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "\\begin{eqnarray}\n", "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", "\\end{eqnarray}" ], "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Latex\n", "\n", "\n", "Latex(\n", " r\"\"\"\\begin{eqnarray}\n", "\\nabla \\times \\vec{\\mathbf{B}} -\\, \\frac1c\\, \\frac{\\partial\\vec{\\mathbf{E}}}{\\partial t} & = \\frac{4\\pi}{c}\\vec{\\mathbf{j}} \\\\\n", "\\end{eqnarray}\"\"\"\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Audio\n", "\n", "IPython also enables interactive work with sounds. With the `display.Audio` class you can create an audio control that is embedded in the notebook. The interface is analogous to that of the `Image` class. All audio formats supported by the browser can be used." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "from IPython.display import Audio" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following we will output the sine function of a NumPy array as an audio signal. The `Audio` class normalises and codes the data and embeds the resulting audio in the notebook." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "\n", "\n", "f = 500.0\n", "rate = 8000\n", "L = 3\n", "times = np.linspace(0, L, rate * L)\n", "signal = np.sin(f * times)\n", "\n", "Audio(data=signal, rate=rate)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Links to local files\n", "\n", "IPython has built-in classes for generating links to local files. To do this, create a link to a single file with the `FileLink` object:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "magics.ipynb
" ], "text/plain": [ "/Users/veit/cusy/trn/Python4DataScience/docs/workspace/ipython/magics.ipynb" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import FileLink, FileLinks\n", "\n", "\n", "FileLink(\"magics.ipynb\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively, you can generate a list with links to all files in a directory, e.g .:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "./
\n", "  index.rst
\n", "  tab-completion-for-modules.png
\n", "  tab-completion-for-objects.png
\n", "  tab-completion-for-anything.png
\n", "  debugging.ipynb
\n", "  magics.ipynb.license
\n", "  tab-completion-for-modules.png.license
\n", "  tab-completion-for-objects.png.license
\n", "  tab-completion-for-anything.png.license
\n", "  magics.ipynb
\n", "  shell.ipynb
\n", "  display.ipynb
\n", "  examples.ipynb.license
\n", "  examples.ipynb
\n", "  myscript.py
\n", "  importing.ipynb
\n", "  shell.ipynb.license
\n", "  extensions.rst
\n", "  start.rst
\n", "  importing.ipynb.license
\n", "  display.ipynb.license
\n", "  debugging.ipynb.license
\n", "./.ipynb_checkpoints/
\n", "  display-checkpoint.ipynb
\n", "./mypackage/
\n", "  foo.ipynb.license
\n", "  __init__.py
\n", "  foo.ipynb
\n", "./unix-shell/
\n", "  index.rst
\n", "  shell-variables.ipynb.license
\n", "  sorted-length.txt
\n", "  create-delete.ipynb
\n", "  grep-find.ipynb.license
\n", "  create-delete.ipynb.license
\n", "  length.txt
\n", "  file-system.ipynb
\n", "  pipes-filters.ipynb
\n", "  shell-variables.ipynb
\n", "  pipes-filters.ipynb.license
\n", "  file-system.ipynb.license
\n", "  grep-find.ipynb
" ], "text/plain": [ "./\n", " index.rst\n", " tab-completion-for-modules.png\n", " tab-completion-for-objects.png\n", " tab-completion-for-anything.png\n", " debugging.ipynb\n", " magics.ipynb.license\n", " tab-completion-for-modules.png.license\n", " tab-completion-for-objects.png.license\n", " tab-completion-for-anything.png.license\n", " magics.ipynb\n", " shell.ipynb\n", " display.ipynb\n", " examples.ipynb.license\n", " examples.ipynb\n", " myscript.py\n", " importing.ipynb\n", " shell.ipynb.license\n", " extensions.rst\n", " start.rst\n", " importing.ipynb.license\n", " display.ipynb.license\n", " debugging.ipynb.license\n", "./.ipynb_checkpoints/\n", " display-checkpoint.ipynb\n", "./mypackage/\n", " foo.ipynb.license\n", " __init__.py\n", " foo.ipynb\n", "./unix-shell/\n", " index.rst\n", " shell-variables.ipynb.license\n", " sorted-length.txt\n", " create-delete.ipynb\n", " grep-find.ipynb.license\n", " create-delete.ipynb.license\n", " length.txt\n", " file-system.ipynb\n", " pipes-filters.ipynb\n", " shell-variables.ipynb\n", " pipes-filters.ipynb.license\n", " file-system.ipynb.license\n", " grep-find.ipynb" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "FileLinks(\".\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Display notebooks" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os\n", "import sys\n", "import types\n", "\n", "import nbformat\n", "\n", "from IPython.display import HTML, display\n", "from pygments import highlight\n", "from pygments.formatters import HtmlFormatter\n", "from pygments.lexers import PythonLexer\n", "\n", "\n", "formatter = HtmlFormatter()\n", "lexer = PythonLexer()\n", "\n", "# publish the CSS for pygments highlighting\n", "display(\n", " HTML(\n", " \"\"\"\n", "\n", "\"\"\"\n", " % formatter.get_style_defs()\n", " )\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "

markdown cell

\n", "
# `foo.ipynb`
\n", "

code cell

\n", "
def bar():\n",
       "    return "bar"\n",
       "
\n", "\n", "

code cell

\n", "
def dirlist():\n",
       "    listing = !ls\n",
       "    return listing\n",
       "
\n", "\n", "

code cell

\n", "
def whatsmyname():\n",
       "    return __name__\n",
       "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def show_notebook(fname):\n", " \"\"\"display a short summary of the cells of a notebook\"\"\"\n", " nb = nbformat.read(fname, as_version=4)\n", " html = []\n", " for cell in nb.cells:\n", " html.append(\"

%s cell

\" % cell.cell_type)\n", " if cell.cell_type == \"code\":\n", " html.append(highlight(cell.source, lexer, formatter))\n", " else:\n", " html.append(\"
%s
\" % cell.source)\n", " display(HTML(\"\\n\".join(html)))\n", "\n", "\n", "show_notebook(os.path.join(\"mypackage/foo.ipynb\"))" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3.13 Kernel", "language": "python", "name": "python313" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.13.0" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": {}, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 4 }