Closed Figure's state is silently changed in HTML export when plotting asynchronously
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
Línea de trabajo
Comienza con el notebook adjunto y la exportación HTML, utilizando las versiones indicadas de Python, ipympl, Jupyter e ipywidgets. Reproduce la animación asíncrona con figuras numeradas y compárala con la creación de una figura nueva cada vez. Se considera terminado cuando el HTML exportado conserva el estado final de cada figura cerrada anteriormente, en lugar de mostrar el primer valor de set_ydata.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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
- Lenguaje dominante
- Jupyter Notebook
- Estrellas
- 1.7k
- Forks
- 234
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de matplotlib/ipympl
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
matplotlib/ipympl#623 · 1 comentario ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
matplotlib/ipympl#622 · 13 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
matplotlib/ipympl#612 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 45/100
matplotlib/ipympl#611 · 4 comentarios ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 42/100
matplotlib/ipympl#609 · 6 comentarios ·
Todos los issues de matplotlib/ipympl
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
clerk/javascript#9852 ·
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
amponce/archive-movie-browser#165 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Eynzof/Hermes-CN-Desktop#610 ·
-
[Block] Latest Posts [Type] Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
gitbutlerapp/gitbutler#15998 · 1 comentario ·