Interactive data visualizations¶
Jupyter Notebook has support for many kinds of interactive outputs, including the ipywidgets ecosystem as well as many interactive visualization libraries. These are supported in Jupyter Book, with the right configuration. This page has a few common examples.
First off, we’ll download a little bit of data and show its structure:
import plotly.express as px
data = px.data.iris()
data.head()
sepal_length | sepal_width | petal_length | petal_width | species | species_id | |
---|---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | setosa | 1 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | setosa | 1 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | setosa | 1 |
3 | 4.6 | 3.1 | 1.5 | 0.2 | setosa | 1 |
4 | 5.0 | 3.6 | 1.4 | 0.2 | setosa | 1 |
Altair¶
Interactive outputs will work under the assumption that the outputs they produce have
self-contained HTML that works without requiring any external dependencies to load.
See the Altair
installation instructions
to get set up with Altair. Below is some example output.
import altair as alt
alt.Chart(data=data).mark_point().encode(
x="sepal_width",
y="sepal_length",
color="species",
size='sepal_length'
)
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-2-34c14cb5ea2d> in <module>
----> 1 import altair as alt
2 alt.Chart(data=data).mark_point().encode(
3 x="sepal_width",
4 y="sepal_length",
5 color="species",
ModuleNotFoundError: No module named 'altair'
Plotly¶
Plotly is another interactive plotting library that provides a high-level API for visualization. See the Plotly JupyterLab documentation to get started with Plotly in the notebook.
Below is some example output.
:::{important}
For these plots to show, it may be necessary to load require.js
, in your _config.yml
:
sphinx:
config:
html_js_files:
- https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js
:::
import plotly.io as pio
import plotly.express as px
import plotly.offline as py
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", size="sepal_length")
fig
Bokeh¶
Bokeh provides several options for interactive visualizations, and is part of the PyViz ecosystem. See the Bokeh with Jupyter documentation to get started.
Below is some example output. First we’ll initialized Bokeh with output_notebook()
.
This needs to be in a separate cell to give the JavaScript time to load.
from bokeh.plotting import figure, show, output_notebook
output_notebook()
Now we’ll make our plot.
p = figure()
p.circle(data["sepal_width"], data["sepal_length"], fill_color=data["species"], size=data["sepal_length"])
show(p)
ipywidgets¶
You may also run code for Jupyter Widgets in your document, and the interactive HTML outputs will embed themselves in your side. See the ipywidgets documentation for how to get set up in your own environment.
Here are some simple widget elements rendered below.
import ipywidgets as widgets
widgets.IntSlider(
value=7,
min=0,
max=10,
step=1,
description='Test:',
disabled=False,
continuous_update=False,
orientation='horizontal',
readout=True,
readout_format='d'
)
tab_contents = ['P0', 'P1', 'P2', 'P3', 'P4']
children = [widgets.Text(description=name) for name in tab_contents]
tab = widgets.Tab()
tab.children = children
for ii in range(len(children)):
tab.set_title(ii, f"tab_{ii}")
tab
You can find a list of existing Jupyter Widgets in the jupyter-widgets documentation.