[Matplotlib-users] Efficiency in connecting two subplot.

Éric Depagne eric at depagne.org
Fri Feb 16 04:36:40 EST 2018


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()

-- 
Un clavier azerty en vaut deux
----------------------------------------------------------
Éric Depagne                            





More information about the Matplotlib-users mailing list