Closed Figure's state is silently changed in HTML export when plotting asynchronously
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 35/100
Research direction
Start with the attached notebook and HTML export, using the reported Python, ipympl, Jupyter, and ipywidgets versions. Reproduce the asynchronous animation with numbered figures and compare it with creating a new figure each time. Done means exported HTML preserves each previously closed figure's final state instead of showing the first set_ydata value.
Written by the indexing model from the issue text.
Description
Describe the issue
I know, this is a seemingly contrived example, but it's a real-world problem for me.
See attached Notebook and according HTML export
issue.zip
I'm running the notebook cell by cell, where I only start the next cell when the previous animation has been finished. The animation stops automatically. The code for animation is:
def runPlot(duration):
plt.close('all')
fig = plt.figure(1)
t = np.linspace(0, 1, 100)
data_line = plt.plot(t, np.sin(6.28*2*t))[0]
def _impl():
start = time.time()
it = 0
while time.time() - start < duration:
freq = time.time() - start
if it == 0:
data_line.set_ydata(t)
else:
data_line.set_ydata(np.sin(6.28*t*freq))
it = it + 1
fig.canvas.draw()
time.sleep(0.03)
T = threading.Thread(target=_impl)
T.start()
Within this code, a thread is started which shows a figure and continuously updates the ydata of the plotted line. The cell immediately returns, but the thread runs for the given amount of seconds. This leads to an animation in the notebook. Note that in the first iteration, a linear line is plotted instead of the sine wave. After running all cells, the notebook looks like this:
Upon pressing save and exporting to HTML, the exported HTML looks like this:
Apparently, for the HTML export, the state of the first plot widget has been replaced by the data that was first set by set_ydata. Adding more calls to runPlot only keeps the last figure in the correct shape for export, whereas the other figures contain the data initially set by set_ydata.
The problem does not happen when I create a new figure without a number all the time, i.e. replace this
plt.close('all')
fig = plt.figure(1)
with
fig = plt.figure()
However, as all figures are closed by close('all'), no data should be changed in previously open figures anymore.
Versions
$ python -c "import sys; print('\n',sys.version); import ipympl; print('ipympl version:', ipympl.__version__)" && jupyter --version && jupyter nbextension list && jupyter labextension list
3.13.1 (main, Dec 19 2024, 10:35:14) [GCC 11.1.0]
ipympl version: 0.9.5
Selected Jupyter core packages...
IPython : 8.30.0
ipykernel : 6.29.5
ipywidgets : 8.1.5
jupyter_client : 8.6.3
jupyter_core : 5.7.2
jupyter_server : 2.14.2
jupyterlab : 4.3.4
nbclient : 0.10.2
nbconvert : 7.16.4
nbformat : 5.10.4
notebook : 7.3.1
qtconsole : not installed
traitlets : 5.14.3
- Dominant language
- Jupyter Notebook
- Stars
- 1.7k
- Forks
- 234
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from matplotlib/ipympl
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
matplotlib/ipympl#623 · 1 comment ·
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
matplotlib/ipympl#622 · 13 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 42/100
matplotlib/ipympl#612 ·
-
Difficulty 3/5 1-2 days Newbie friendliness 45/100
matplotlib/ipympl#611 · 4 comments ·
-
Difficulty 4/5 3-5 days Newbie friendliness 42/100
matplotlib/ipympl#609 · 7 comments ·
All issues in matplotlib/ipympl
Similar issues
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Difficulty 1/5 Under an hour Newbie friendliness 82/100
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
dennys-bd/agent-hive#184 ·
-
bug frontend
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
cancervariants/metakb#902 ·
-
Two open-case totals on one screen: the Programs tile says 15,858 and the nav badge says 15,868 Openbug frontend maui-pilot
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Save States Menu Open
Difficulty 2/5 1-3 hours Newbie friendliness 68/100