py_d3 is an IPython extension which adds D3 support to the Jupyter Notebook environment.
You can install
py_d3 by running
pip install py_d3. Then load it into a Jupyter notebook by
%%d3 cell magic
to define notebook cells with D3 content.
py_d3 allows you to express even very complex visual ideas within a Jupyter Notebook without much difficulty.
A Radial Reingold-Tilford Tree, for example:
An interactive treemap (original):
Or even the entire D3 Show Reel animation:
For more examples refer to the examples notebooks.
The cell magic will default to loading the latest stable version of D3.JS available online (via
email@example.com at time of writing). To load a specific version, append the version
name to the command, e.g.
%%d3 "3.5.17". To load D3.JS from a local file pass the filepath, e.g.
Only one version of D3.JS may be loaded at a time. Both
4.x versions of D3 are supported, but you may
only run one version of D3 per notebook. You can check which versions are available by running
%d3 versions, and check which version
is loaded in the current notebook using
Pages from the D3 API Reference may be rendered in-notebook using
%d3 doc. For example, you can render the
d3-array reference by running
%d3 doc "d3-array".
You can view code to-be-rendered using verbose mode:
%d3 -v. This is helpful for debugging your application.
How it works
effort to restrict the level of DOM objects accessible to executable code.
py_d3 works by restricting
d3 scope to
whatever cell you are running the code in, by monkey-patching the
d3.selectAll methods (see
here for why this works).
Most HTML-hosted D3 visualizations, even very complex ones, can be made to run inside of a Jupyter Notebook
%%d3 cell with just two modifications:
- Remove any D3 imports in the cell (e.g.
- Make sure to create and append to a legal HTML document sub-element.
CONTRIBUTING.md for instructions on how to contribute. Pull requests are welcome!