[Matplotlib-users] Efficiency in connecting two subplot.

vincent.adrien at gmail.com vincent.adrien at gmail.com
Fri Feb 16 14:41:07 EST 2018


Hi Éric,

I am not very used to play with interactive events, but I guess some 
blitting could help you with performance:
- 
https://stackoverflow.com/questions/29277080/efficient-matplotlib-redrawing
- 
https://matplotlib.org/users/event_handling.html#draggable-rectangle-exercise 
(see the extra credit example)

See the attached script that is inspired from your code and seems to 
less stress my CPU.

Hopefully this helps.

Best,
Adrien

On 02/16/2018 01:36 AM, Éric Depagne wrote:
> Hi all,
> 
> I have a gridspec plot and one of the subplot is a zoom on the part over which
> the mouse hovers on another subplot.
> 
> It works, but I think the way I implemented it is not very efficient, since each
> time I use it, I see one CPU go to 100%.
> Here is the code that does implement the zoom. Any idea on how to make it
> (more) efficient or changes that I should implement welcome.
> 
> Thanks.
> 
> def plot(self):
>          gs = gridspec.GridSpec(6, 2)
>          ax1 = plt.subplot(gs[1:, 0])
>          plt1 = ax1.imshow(self.data, vmin=self.dataminzs, vmax=self.datamaxzs)
>          ax1.set_label('AX1')
>          self.ax2 = plt.subplot(gs[0:3, 1])
>          zoomeddata = self.data[np.int(self.data.shape[0]/
> 2)-50:np.int(self.data.shape[0]/2)+50, np.int(self.data.shape[1]/
> 2)-50:np.int(self.data.shape[1]/2)+50]
>          self.plt2 = self.ax2.imshow(zoomeddata, vmin=self.dataminzs,
> vmax=self.datamaxzs)
>          ax1.figure.canvas.mpl_connect('motion_notify_event', self._on_move)
> 
>      def _on_move(self, event):
>          zoom1 = 100
>          if event.inaxes:
> 
>              ax = event.inaxes  # the axes instance
>              if 'AX1' in ax.get_label():
>                  # Mouse is in subplot 1.
>                  xinf2 = np.int(event.xdata - zoom1)
>                  xsup2 = np.int(event.xdata + zoom1)
>                  yinf2 = np.int(event.ydata - zoom1)
>                  ysup2 = np.int(event.ydata + zoom1)
>                  ax2data = self.data[yinf2:ysup2, xinf2:xsup2]
>                  self.plt2.set_data(ax2data)
>                  self.ax2.figure.canvas.draw()
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: playground_blit.py
Type: text/x-python
Size: 2154 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/matplotlib-users/attachments/20180216/880fa717/attachment.py>


More information about the Matplotlib-users mailing list