Before I get started, I am totally excited about the Matplotlib panes supporting ipympl and interactions. However, while I was testing out this new feature, I encountered some unexpected behavior. Here’s an MWE from my testing
import numpy as np import matplotlib.pyplot as plt from IPython.display import display import panel as pn pn.extension() TWOPI = 2*np.pi fig, ax = plt.subplots() t = np.arange(0.0, TWOPI, 0.001) initial_amp = 0.5 s = initial_amp*np.sin(t) l, = ax.plot(t, s, lw=2) ax.set_xlim(0, TWOPI) ax.set_ylim(-1, 1) def add_lines(event): xloc = event.xdata yloc = event.ydata ax.axvline(xloc) ax.axhline(yloc) fig.canvas.draw_idle() fig.canvas.mpl_connect('button_press_event', add_lines) mpl_pane = pn.pane.Matplotlib(fig, dpi=144, interactive=True) display(mpl_pane)
If I just use
plt.show() outside of Panel, I get the interactivity that I expect. However, when I put the figure in a Matplotlib pane, I lose the
I did find, though, that if I move th
mpl_connect statement to after the
display function is called, the
button_press_event callback is triggered in the Matplotlib pane.
Not sure if this is a bug or a limitation, but it would sure be nice if any event handling in the figure can carry over into the Matplotlib pane without tweaks to pre-existing code.
Thank you for all your hard work on this project!