Python 单击可放大子图(带有插入轴打印)

Python 单击可放大子图(带有插入轴打印),python,matplotlib,Python,Matplotlib,因此,我遵循了这条线索的方法: 从他的例子中可以看出,它实际上运行得很好。但是,有一个问题是,我的绘图中有插入轴绘图。因此,当它缩放时,所有的插入图都保留下来,并且实际上与放大的图重叠 但是,我不知道如何删除它们,甚至可能还会放大与正在单击的子绘图一起显示的插图 因此,从线程中,我刚刚将此类用于缩放方法: class ZoomingSubplots(object): def __init__(self, *args, **kwargs): ""&qu

因此,我遵循了这条线索的方法:

从他的例子中可以看出,它实际上运行得很好。但是,有一个问题是,我的绘图中有
插入轴
绘图。因此,当它缩放时,所有的插入图都保留下来,并且实际上与放大的图重叠

但是,我不知道如何删除它们,甚至可能还会放大与正在单击的子绘图一起显示的插图

因此,从线程中,我刚刚将此类用于缩放方法:

class ZoomingSubplots(object):
    def __init__(self, *args, **kwargs):
        """All parameters passed on to 'subplots`."""
        self.fig, self.axes = plt.subplots(*args, **kwargs)
        self._zoomed = False
        self.fig.canvas.mpl_connect('button_press_event', self.on_click)
        self.fig.subplots_adjust(hspace=0.3)

    def zoom(self, selected_ax):
        for ax in self.axes.flat:
            ax.set_visible(False)
        self._original_size = selected_ax.get_position()
        selected_ax.set_position([0.125, 0.1, 0.775, 0.8])
        selected_ax.set_visible(True)
        self._zoomed = True

    def unzoom(self, selected_ax):
        selected_ax.set_position(self._original_size)
        for ax in self.axes.flat:
            ax.set_visible(True)
        self._zoomed = False

    def on_click(self, event):
        if event.inaxes is None:
            return
        if self._zoomed:
            self.unzoom(event.inaxes)
        else:
            self.zoom(event.inaxes)
        self.fig.canvas.draw()
然后当我绘图时,我使用这个:

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

__name__ = '__main__':
    subplots = ZoomingSubplots(2, 2)

    for ax in subplots.axes.flat:
        ax.plot(x, y)
        axins = inset_axes(ax, width=1.3, height=0.9, loc=2)
        axins.plot(x2, y2)

    plt.show()

但如前所述,所有子地块的插入图将保持其位置,并与放大图重叠。我怎样才能改变这一点,使它们不会干预,甚至子地块的插入图也会保留并放大?

我找不到改变插入轴位置的方法,可能是因为它们的位置和大小被锁定在其父轴上

同时,这里有一个新类,它自动创建插入轴,并在单击其中一个基准轴时隐藏/显示相关的插入轴

class ZoomingSubplotsWithInset(ZoomingSubplots):
定义初始值(self,*args,插图宽度=1.3,插图高度=0.9,插图位置=2,**kwargs):
super(缩放子图集,self)。\uuuuu初始化(*args,**kwargs)
self.inset_轴=[]
对于在self.axes.flat中的ax:
轴=插入轴(轴,宽度=插入宽度,高度=插入高度,位置=插入位置)
self.inset\u axes.append(axins)
self.inset\u轴=np.array(self.inset\u轴)
单击时的def(自身,事件):
如果event.inaxes位于self.axes.flat中:
超级(缩放子地块,自我)。点击(事件)
def缩放(自身、选定的_ax):
对于自插入轴平面中的ax:
ax.set_可见(错误)
超级(缩放子地块,自我)。缩放(选定)
#恢复与缩放轴对应的插入轴的可见性
_,u,i=选定的_ax.get_几何体()
self.inset_轴[i-1]。设置_可见(真)
def取消缩放(自身、选定的_ax):
对于自插入轴平面中的ax:
ax.set_可见(真)
super(缩放子块swithinset,self)。取消缩放(选中)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
N=10
子地块=缩放子地块设置(2,2)
对于ax,轴在zip中(子地块.轴.平面,子地块.插入\轴.平面):
x、 y=np.random.random(大小=(2,N))
x2,y2=np.random.random(大小=(2,N))
轴图(x,y)
轴图(x2,y2)
plt.show()