Jupyter Notebook files

You can create content with Jupyter Notebooks. For example, the content for the current page is contained in this notebook file.

Jupyter Book supports all markdown that is supported by Jupyter Notebooks. This is mostly a flavor of markdown called CommonMark Markdown with minor modifications. For more information about writing Jupyter-flavored markdown in Jupyter Book, see Markdown files.

Code blocks and image outputs

Jupyter Book will also embed your code blocks and output in your book. For example, here’s some sample Matplotlib code:

from matplotlib import rcParams, cycler
import matplotlib.pyplot as plt
import numpy as np
plt.ion()
# Fixing random state for reproducibility
np.random.seed(19680801)

N = 10
data = [np.logspace(0, 1, 100) + np.random.randn(100) + ii for ii in range(N)]
data = np.array(data).T
cmap = plt.cm.coolwarm
rcParams['axes.prop_cycle'] = cycler(color=cmap(np.linspace(0, 1, N)))


from matplotlib.lines import Line2D
custom_lines = [Line2D([0], [0], color=cmap(0.), lw=4),
                Line2D([0], [0], color=cmap(.5), lw=4),
                Line2D([0], [0], color=cmap(1.), lw=4)]

fig, ax = plt.subplots(figsize=(10, 5))
lines = ax.plot(data)
ax.legend(custom_lines, ['Cold', 'Medium', 'Hot']);
../_images/notebooks_2_0.png

Note that the image above is captured and displayed in your site.

../_images/notebooks_4_0.png

Removing content before publishing

You can also remove some content before publishing your book to the web. For reference, you can download the notebook content for this page.

You can remove only the code so that images and other output still show up.

thisvariable = "this plot *will* show up in the textbook."

fig, ax = plt.subplots()
x = np.random.randn(100)
y = np.random.randn(100)
ax.scatter(x, y, s=np.abs(x*100), c=x, cmap=plt.cm.coolwarm)
ax.text(0, .5, thisvariable, fontsize=20, transform=ax.transAxes)
ax.set_axis_off()
../_images/notebooks_9_0.png

Which works well if you’d like to quickly display cell output without cluttering your content with code. This works for any cell output, like a Pandas DataFrame.

import pandas as pd
pd.DataFrame([['hi', 'there'], ['this', 'is'], ['a', 'DataFrame']], columns=['Word A', 'Word B'])
Word A Word B
0 hi there
1 this is
2 a DataFrame

See Removing code cell content for more information about hiding and removing content.

Interactive outputs

We can do the same for interactive material. Below we’ll display a map using folium. When your book is built, the code for creating the interactive map is retained.

import folium
m = folium.Map(
    location=[45.372, -121.6972],
    zoom_start=12,
    tiles='Stamen Terrain'
)

folium.Marker(
    location=[45.3288, -121.6625],
    popup='Mt. Hood Meadows',
    icon=folium.Icon(icon='cloud')
).add_to(m)

folium.Marker(
    location=[45.3311, -121.7113],
    popup='Timberline Lodge',
    icon=folium.Icon(color='green')
).add_to(m)

folium.Marker(
    location=[45.3300, -121.6823],
    popup='Some Other Location',
    icon=folium.Icon(color='red', icon='info-sign')
).add_to(m)


m
Make this Notebook Trusted to load map: File -> Trust Notebook

Rich outputs from notebook cells

Because notebooks have rich text outputs, you can store these in your Jupyter Book as well! For example, here is the command line help menu, see how it is nicely formatted.

!jupyter-book build --help
Usage: jupyter-book build [OPTIONS] PATH_BOOK

  Convert your book's content to HTML or a PDF.

Options:
  --path-output TEXT    Path to the output artifacts
  --config TEXT         Path to the YAML configuration file
  --toc TEXT            Path to the Table of Contents YAML file
  -W, --warningiserror  Error on warnings.
  --builder TEXT        Which builder to use. Must be one of {BUILDER_OPTIONS}
  --help                Show this message and exit.

And here is an error. You can mark notebook cells as “expected to error” by adding a raises-exception tag to them.

this_will_error
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-9-09f61459889d> in <module>
----> 1 this_will_error

NameError: name 'this_will_error' is not defined

More features with Jupyter Notebooks

There are many other features of Jupyter Notebooks to take advantage of, such as automatically generating Binder links for notebooks or connecting your content with a kernel in the cloud. For more information browse the pages in this site.