matplotlib / matplotlib/ipympl
Error raised on mouse cursor hover with matplotlib>=3.10
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Jupyter Notebook
- Star
- 1.7k
- Fork
- 234
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Mô tả
## 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
```
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Tái hiện vấn đề với matplotlib>=3.10 và ipympl 0.9.7 bằng ví dụ notebook, sau đó kiểm tra backend_nbagg.py và backend_webagg_core.py của matplotlib xung quanh Canvas._handle_message và _handle_mouse. Được xem là hoàn tất khi việc di chuột qua các trục không còn gây ra KeyError và hình vẫn tương tác được.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- jupyter, jupyter-notebook, matplotlib, python
- Lĩnh vực
- backend, frontend
- Loại issue
- Lỗi
- Độ khó
- 3/5
- Thời gian dự kiến
- 1-2 ngày
- Mức độ hoạt động
- Ít trao đổi
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 55/100