https://github.com/matplotlib/ipympl
Matplotlib Jupyter Integration
https://github.com/matplotlib/ipympl
interactive ipywidgets jupyter-widgets jupyterlab-extension matplotlib
Last synced: about 1 month ago
JSON representation
Matplotlib Jupyter Integration
- Host: GitHub
- URL: https://github.com/matplotlib/ipympl
- Owner: matplotlib
- License: bsd-3-clause
- Created: 2016-07-21T14:38:56.000Z (over 9 years ago)
- Default Branch: main
- Last Pushed: 2025-10-09T14:17:32.000Z (5 months ago)
- Last Synced: 2026-01-13T19:52:31.343Z (about 2 months ago)
- Topics: interactive, ipywidgets, jupyter-widgets, jupyterlab-extension, matplotlib
- Language: TypeScript
- Homepage: https://matplotlib.org/ipympl/
- Size: 67.1 MB
- Stars: 1,641
- Watchers: 31
- Forks: 230
- Open Issues: 172
-
Metadata Files:
- Readme: README.md
- Contributing: docs/contributing.md
- License: LICENSE
Awesome Lists containing this project
- awesome-starred - matplotlib/ipympl - Matplotlib Jupyter Integration (others)
- awesome-jupyter-resources - GitHub - 44% open · ⏱️ 22.08.2022): (交互式小部件和可视化)
- best-of-jupyter - GitHub - 49% open · ⏱️ 09.10.2025): (Interactive Widgets & Visualization)
- awesome-jupyter-widgets - ipympl - interactive Matplotlib (Interactive Widgets / Interactive Jupyter Widget Ecosystem)
README
# ipympl
[](https://github.com/matplotlib/ipympl/actions/workflows/main.yml?query=branch%3Amain)
[](https://pypi.python.org/pypi/ipympl)
[](https://anaconda.org/conda-forge/ipympl)
[](https://www.npmjs.com/package/jupyter-matplotlib)
[](https://mybinder.org/v2/gh/matplotlib/ipympl/main?urlpath=notebooks/docs/examples/full-example.ipynb)
[](https://gitter.im/jupyter-widgets/Lobby)
Leveraging the Jupyter interactive widgets framework, `ipympl` enables the interactive features of matplotlib in the Jupyter notebook and in JupyterLab.
Besides, the figure `canvas` element is a proper Jupyter interactive widget which can be positioned in interactive widget layouts.
## Usage
To enable the `ipympl` backend, simply use the `matplotlib` Jupyter
magic:
```
%matplotlib ipympl
```
## Documentation
See the documentation at:
## Example
See the [example notebook](https://github.com/matplotlib/ipympl/blob/main/docs/examples/full-example.ipynb) for more!

## Installation
### With conda
```bash
conda install -c conda-forge ipympl
```
### With pip
```bash
pip install ipympl
```
### Use in JupyterLab
If you want to use ipympl in JupyterLab, we recommend using JupyterLab >= 3.
If you use JupyterLab 2, you still need to install the labextension manually:
```bash
conda install -c conda-forge nodejs
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib
```
#### Install an old JupyterLab extension
If you are using JupyterLab 1 or 2, you will need to install the right `jupyter-matplotlib` version, according to the `ipympl` and `jupyterlab` versions you installed.
For example, if you installed ipympl `0.5.1`, you need to install jupyter-matplotlib `0.7.0`, and this version is only compatible with JupyterLab `1`.
```bash
conda install -c conda-forge ipympl==0.5.1
jupyter labextension install @jupyter-widgets/jupyterlab-manager jupyter-matplotlib@0.7.0
```
Versions lookup table:
| `ipympl` | `jupyter-matplotlib` | `JupyterLab` | `Matplotlib` |
|----------|----------------------|--------------|--------------|
| 0.10.0 | 0.12.0 | >=2,<5 | >=3.5.0 |
| 0.9.5-8 | 0.11.5-8 | >=2,<5 | >=3.5.0 |
| 0.9.3-4 | 0.11.3-4 | >=2,<5 | 3.4.0>= |
| 0.9.0-2 | 0.11.0-2 | >=2,<5 | 3.4.0>= <3.7|
| 0.8.8 | 0.10.x | >=2,<5 | 3.3.1>= <3.7|
| 0.8.0-7 | 0.10.x | >=2,<5 | 3.3.1>=, <3.6|
| 0.7.0 | 0.9.0 | >=2,<5 | 3.3.1>= |
| 0.6.x | 0.8.x | >=2,<5 | 3.3.1>=, <3.4|
| 0.5.8 | 0.7.4 | >=1,<3 | 3.3.1>=, <3.4|
| 0.5.7 | 0.7.3 | >=1,<3 | 3.2.* |
| ... | ... | ... | |
| 0.5.3 | 0.7.2 | >=1,<3 | |
| 0.5.2 | 0.7.1 | >=1,<2 | |
| 0.5.1 | 0.7.0 | >=1,<2 | |
| 0.5.0 | 0.6.0 | >=1,<2 | |
| 0.4.0 | 0.5.0 | >=1,<2 | |
| 0.3.3 | 0.4.2 | >=1,<2 | |
| 0.3.2 | 0.4.1 | >=1,<2 | |
| 0.3.1 | 0.4.0 | >=0<2 | |
### For a development installation
We recommend using [pixi](https://pixi.sh) for development as it handles both Python and Node.js dependencies (matplotlib has compiled dependencies).
```bash
# Install dependencies and set up environment
pixi install
# Install the Python package in editable mode
pixi run pip install -e .
# Install JavaScript dependencies and build
pixi run jlpm install
pixi run jlpm build
# Set up JupyterLab extension in development mode
pixi run jupyter labextension develop --overwrite .
# Start development workflow (in separate terminals)
pixi run npm run watch # Terminal 1: Auto-rebuild on changes
pixi run jupyter lab # Terminal 2: Run JupyterLab
```
**Alternative: Using conda/mamba**
```bash
mamba env create --file dev-environment.yml
conda activate ipympl-dev
pip install -e .
jlpm install
jlpm build
jupyter labextension develop --overwrite .
# Start development workflow (in separate terminals)
npm run watch # Terminal 1: Auto-rebuild on changes
jupyter lab # Terminal 2: Run JupyterLab
```
#### How to see your changes
**TypeScript/JavaScript:** After a change, the watch command will automatically rebuild. Wait for the build to finish, then refresh your browser and the changes should take effect.
**Python:** If you make a change to the Python code, restart the notebook kernel to have it take effect.
#### Classic Jupyter Notebook
If you need to develop for classic Jupyter Notebook (not JupyterLab), also run:
```bash
# With pixi:
pixi run jupyter nbextension install --py --symlink --sys-prefix --overwrite ipympl
pixi run jupyter nbextension enable --py --sys-prefix ipympl
# Or with conda/mamba:
jupyter nbextension install --py --symlink --sys-prefix --overwrite ipympl
jupyter nbextension enable --py --sys-prefix ipympl
```