matplotlib / ipympl

Matplotlib Jupyter Integration
https://matplotlib.org/ipympl/
BSD 3-Clause "New" or "Revised" License
1.58k stars 226 forks source link

Resize callback not working #326

Open spapa013 opened 3 years ago

spapa013 commented 3 years ago

Describe the issue

I am having an issue specifically with the Resize callback. The other callback options appear to work as expected. For example replacing 'resize_event' with 'draw_event' in the code block below gives no issues.

import matplotlib.pyplot as plt
import numpy as np
from ipywidgets import Output
%matplotlib widget

output = Output()

@output.capture()
def key_event(event):
    print('action')

fig, ax = plt.subplots()
ax.plot(np.random.rand(10))
fig.canvas.mpl_connect('resize_event', key_event)

display(output)

Versions

3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]]
ipympl version: 0.7.0
jupyter core     : 4.5.0
jupyter-notebook : 6.0.1
qtconsole        : not installed
ipython          : 7.7.0
ipykernel        : 5.1.2
jupyter client   : 5.3.1
jupyter lab      : 1.0.9
nbconvert        : 5.6.0
ipywidgets       : 7.6.3
nbformat         : 4.4.0
traitlets        : 4.3.2
Known nbextensions:
  config dir: /usr/local/etc/jupyter/nbconfig
    notebook section
      ipyvolume/extension  enabled
      - Validating: OK
      jupyter-datawidgets/extension  enabled
      - Validating: OK
      jupyter-matplotlib/extension  enabled
      - Validating: OK
      jupyter-threejs/extension  enabled
      - Validating: OK
      jupyter-webrtc/extension  enabled
      - Validating: OK
      jupyter-js-widgets/extension  enabled
      - Validating: OK
    tree section
      ipyparallel/main  enabled
      - Validating: OK
JupyterLab v1.0.9
Known labextensions:
   app dir: /usr/local/share/jupyter/lab
        jupyter-threejs v2.3.0  enabled  OK
        jupyterlab-datawidgets v7.0.0  enabled  OK
ianhi commented 3 years ago

Can you clarify what the "issue" you are having is? Your code snippet works as expected for me when I manually resize the plot using the grey triangle in the bottom right.

spapa013 commented 3 years ago

I see, when I resize the plot with the gray triangle, the action is triggered. But when I resize the canvas using fig.set_size_inches(), it is not triggered. Is 'resize_event' only mapped to the gray triangle?

ianhi commented 3 years ago

related issue: https://github.com/matplotlib/matplotlib/issues/20316

I think that this is indeed a bug. It seems to work from scripts for both manual resize and for for set_size_inches