matplotlib / ipympl

Matplotlib Jupyter Integration
https://matplotlib.org/ipympl/
BSD 3-Clause "New" or "Revised" License
1.55k stars 224 forks source link

Blank figures in Jupyter notebook #556

Open btlorch opened 1 month ago

btlorch commented 1 month ago

I have happily used interactive plots in jupyter notebooks for years with %matplotlib notebook. Unfortunately, since version 7 was introduced, I have experienced troubles with getting interactive plotting to work properly. I read that version 7 requires installing ipympl and %matplotlib ipympl.

Today, I set up a fresh virtual environment and installed jupyter and ipympl. Figures are opening, the controls appear, a figure title appears, but the figure contains no content. There is also no error message on the browser's developer console.

Steps to reproduce:

# Create virtual environment
python3 -m venv debug
source debug/bin/activate

# Install jupyter and ipympl
pip install jupyter ipympl matplotlib numpy

# Open notebook
jupyter notebook

Then I use the code from the basic example

%matplotlib ipympl
import matplotlib.pyplot as plt
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(3*x)
ax.plot(x, y)

A white area is opening, the controls appear, but there is no figure content.

I have seen several similar issues on Stackoverflow, where the solution is usually to upgrade or downgrade one of the packages. However, these answers have aged as newer versions came out in the meantime. Is there a general recipe to identify the issue when interactive plotting fails?

Versions

Python: 3.12.3
ipympl version: 0.9.4
IPython          : 8.25.0
ipykernel        : 6.29.4
ipywidgets       : 8.1.3
jupyter_client   : 8.6.2
jupyter_core     : 5.7.2
jupyter_server   : 2.14.1
jupyterlab       : 4.2.1
nbclient         : 0.10.0
nbconvert        : 7.16.4
nbformat         : 5.10.4
notebook         : 7.2.0
qtconsole        : 5.5.2
traitlets        : 5.14.3
jupyter labextension list 
JupyterLab v4.2.1
/home/bene/local/venvs/debug/share/jupyter/labextensions
        jupyterlab_pygments v0.3.0 enabled OK (python, jupyterlab_pygments)
        jupyter-matplotlib v0.11.4 enabled OK
        @jupyter-widgets/jupyterlab-manager v5.0.11 enabled OK (python, jupyterlab_widgets)
        @jupyter-notebook/lab-extension v7.2.0 enabled OK
martinRenou commented 1 month ago

Thanks for opening an issue.

A white area is opening, the controls appear, but there is no figure content.

So it looks like ipympl was properly installed and is working with Notebook 7, otherwise you wouldn't see the figure controls.

It's weird though that you are getting a white area. I will try to reproduce.

btlorch commented 1 month ago

Thanks, I updated my initial post with the list of extensions. As far as I can see, the versions should be compatible according to the version compatibility table.

martinRenou commented 1 month ago

Yes, your installation looks perfectly fine.

What is your matplotlib version?

btlorch commented 1 month ago

My matplotlib version is 3.9.0.

martinRenou commented 1 month ago

Thanks, I can reproduce your issue.

I wonder if this has to do with ipympl not supporting plt.subplot (it is). Friendly ping @ianhi, I suspect you're more familiar than me on this matter.

martinRenou commented 1 month ago

Wait, I see something really weird (same code, same environment, same server, different notebooks, on the left I can see the plot 100% of the time when executing, on the right I never see it):

Screenshot from 2024-06-05 11-20-29

btlorch commented 1 month ago

Hm, I shut down and close the notebook, then reopen it, I can see the figure. When I create another new notebook, there the figure does not show up.

martinRenou commented 1 month ago

It seems we have some kind of race condition in the initialization of the plot in the case of Notebook 7. It was never reported in the case of JupyterLab AFAIK.

jtpio commented 3 weeks ago

For reference this seems to be the case in JupyterLab 4.2.2 too:

image