Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork7.9k
Description
Bug report
duplicate pick events occurring in 3.4.rc1
In MNE-Python, our CIs that test against 3.4.rc1 are failing, because pick events are getting fired twice for every time an artist is picked (this is not happening on 3.3.4). It's happening in a very complicated interactive figure, and I haven't yet managed to work up an MWE that doesn't depend on MNE-Python. But, I've usedgit bisect
to isolate the first test failure to matplotlib commit6d79e6e. I will continue trying to further isolate this, but in the meantime if anyone is familiar with MPL changes in the last 4 months, I'd be happy to hear ideas about what might be going on here.
Code for reproduction
This code mirrors what we're doing but is too minimal, in that it doesn't yield doubled pick events:
importmatplotlib.pyplotaspltfrommatplotlib.textimportTextdefpick_handler(event):ifisinstance(event.artist,Text):print("PICKED")fig,ax=plt.subplots()_=ax.plot((0,1), (0,1))forlabinax.get_yticklabels():lab.set_picker(True)fig.canvas.mpl_connect('pick_event',pick_handler)
This code reproduces, but withmne
dependency:
importnumpyasnpimportmatplotlib.pyplotaspltimportmne# make fake datadata=np.random.standard_normal((2,100))info=mne.create_info(['ch1','ch2'],1000)raw=mne.io.RawArray(data,info)# plot itfig=raw.plot()
In the resulting figure, clicking on one of the yticklabels (the channel names) is supposed to mark the channel as bad (which among other effects, will turn it light grey). This doesn't happen because the pick event is fired twice, effectively marking and then unmarking the bad channel before a redraw can happen (I have confirmed this by simply inserting aprint
statement in the pick handler; it prints twice for each click). There is nothing wrong with the code that marks bad channels; you can do it by clicking on the channel trace itself (which responds tobutton_press_event
instead ofpick_event
, for complicated reasons).
Matplotlib version
- Operating system:
- Matplotlib version (
import matplotlib; print(matplotlib.__version__)
): 3.3.2.post1516+g6d79e6edd - Matplotlib backend (
print(matplotlib.get_backend())
): Qt5Agg - Python version: 3.8.8
- Jupyter version (if applicable):
- Other libraries: mne: current
main
(0.23.dev0)
matplotlib installed viapip install -e .
from a git clone.