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