matplotlib / matplotlib/ipympl

Error raised on mouse cursor hover with matplotlib>=3.10

オープン
#594 コメント 25 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
Jupyter Notebook
スター
1.7k
フォーク
234
PR マージ指標
30日以内にマージされた PR はありません

説明

Describe the issue

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

Example:

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

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

ノートブックの例を使用して matplotlib>=3.10 と ipympl 0.9.7 で問題を再現し、その後、Canvas._handle_message と _handle_mouse の周辺にある backend_nbagg.py および matplotlib の backend_webagg_core.py を調査します。軸の上にマウスカーソルを置いても KeyError が発生せず、Figure がインタラクティブなままであれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
jupyter, jupyter-notebook, matplotlib, python
領域
backend, frontend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
静か
明瞭さ
おおむね明確
初心者へのやさしさ
55/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。