matplotlib / matplotlib/ipympl

Error raised on mouse cursor hover with matplotlib>=3.10

Abierto
#594 25 comentarios 1 reacción 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Lenguaje dominante
Jupyter Notebook
Estrellas
1.7k
Forks
234
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

## Describe the issue

Using `matplotlib>=3.10.*`, making any plot with `ipympl` raises an error when hovering the mouse over the axes.

Example:
```Py
import matplotlib.pyplot as plt
%matplotlib widget

fig, ax = plt.subplots()
```

Hovering the mouse over the plot raises
```
KeyError Traceback (most recent call last)
File [~/miniforge3/lib/python3.12/site-packages/ipympl/backend_nbagg.py:278](http://localhost:8888/home/nvaytet/miniforge3/lib/python3.12/site-packages/ipympl/backend_nbagg.py#line=277), in Canvas._handle_message(self, object, content, buffers)
275 self.manager.handle_json(content)
277 else:
--> 278 self.manager.handle_json(content)

File [~/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py:474](http://localhost:8888/home/nvaytet/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py#line=473), in FigureManagerWebAgg.handle_json(self, content)
473 def handle_json(self, content):
--> 474 self.canvas.handle_event(content)

File [~/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py:264](http://localhost:8888/home/nvaytet/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py#line=263), in FigureCanvasWebAggCore.handle_event(self, event)
261 e_type = event['type']
262 handler = getattr(self, f'handle_{e_type}',
263 self.handle_unknown_event)
--> 264 return handler(event)

File [~/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py:295](http://localhost:8888/home/nvaytet/miniforge3/lib/python3.12/site-packages/matplotlib/backends/backend_webagg_core.py#line=294), in FigureCanvasWebAggCore._handle_mouse(self, event)
286 e_type = event['type']
287 button = event['button'] + 1 # JS numbers off by 1 compared to mpl.
288 buttons = { # JS ordering different compared to mpl.
289 button for button, mask in [
290 (MouseButton.LEFT, 1),
291 (MouseButton.RIGHT, 2),
292 (MouseButton.MIDDLE, 4),
293 (MouseButton.BACK, 8),
294 (MouseButton.FORWARD, 16),
--> 295 ] if event['buttons'] & mask # State *after* press[/release.](http://localhost:8888/release.)
296 }
297 modifiers = event['modifiers']
298 guiEvent = event.get('guiEvent')

KeyError: 'buttons'
```

**Note:** need to set level to 'Debug' in log console to see it.

The figure is basically inactive.

Could be related to #592 but I did install `0.9.7` and it did not fix the issue.

Downgrading to `matplotlib=3.9.4` fixes the issue.

## Versions

```
3.12.7 | packaged by conda-forge | (main, Oct 4 2024, 16:05:46) [GCC 13.3.0]
ipympl version: 0.9.7
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.1
nbclient : 0.10.1
nbconvert : 7.16.4
nbformat : 5.10.4
notebook : not installed
qtconsole : not installed
traitlets : 5.14.3
```

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Línea de trabajo

Reproduce el problema con matplotlib>=3.10 e ipympl 0.9.7 usando el ejemplo del notebook y, a continuación, inspecciona backend_nbagg.py y backend_webagg_core.py de matplotlib alrededor de Canvas._handle_message y _handle_mouse. Se considera terminado cuando pasar el cursor sobre los ejes ya no provoca un KeyError y la figura sigue siendo interactiva.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
jupyter, jupyter-notebook, matplotlib, python
Área
backend, frontend
Tipo de issue
Error
Dificultad
3/5
Tiempo estimado
1-2 días
Estado de actividad
Tranquilo
Claridad
Bastante claro
Aptitud para principiantes
55/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.