为什么删除分配给子图声明对象的对象?

时间:2018-08-28 10:18:04

标签: matlab plot matlab-figure subplot

我想在不同的位置制作4个单独的子图。我的目标是首先设置图形,然后向每个图形添加对象,然后再为对象设置动画。在尝试将对象作为子图的父对象之前,一切似乎都可以正常工作。使用以下代码在构建子图形后立即添加对象时,不会发生该错误。

H1 = subplot('Position',[0.2,0.2,0.2,0.2]);
rectangle('Parent',H1,'Position',[10,20,20,20])

当我尝试回调到随后建立的图形时,错误似乎增加了,如下面我当前正在处理的代码所示。

screencolor = [0,0,0];
StimWindow = figure('MenuBar','none', ...                    % Build Window for stimulus
    'Color',screencolor);

figuresize = get(0,'ScreenSize'); 

set(StimWindow,'Position',figuresize);
set(0,'defaultaxesposition',[0 0 1 1])
Stimsubfigures{1} = subplot('Position',[0,0,1,1]);       % First subplot figure which spans the entire screen 
set(Stimsubfigures{1},'xLim',[0,100])
set(Stimsubfigures{1},'YLim',[0,100])
set(Stimsubfigures{1},'Visible','off')

% create subplots for stim system 3 plate setup
for aa = 2:4
    Stimsubfigures{aa} = subplot(...
                                'Position',[.01+aa*.21,.2,.2,.2], ...
                                'color','none');
    set(Stimsubfigures{aa},'xLim',[0,100])
    set(Stimsubfigures{aa},'YLim',[0,100])
    set(Stimsubfigures{aa},'Visible','off')
end

OrtDish = rectangle(...
    'Parent',Stimsubfigures{1},...
    'Position', [0,0,100,100],...                            
    'facecolor',screencolor,...
    'edgecolor',[.5,0,0],...
    'curvature',[1,1],...
    'LineWidth',3);

显示的错误表明无法将对象附加到已删除的句柄。当我接触计算机时,我会提供确切的错误信息。

这很奇怪,因为没有删除该句柄,它存储在一个单元矩阵中。

1 个答案:

答案 0 :(得分:2)

问题来自重叠的subplot:您绘制了一个完整比例的子图,然后在它上面添加了一些新的子图。

正如Matlab文档所说,

  

如果SUBPLOT规范导致新轴与现有轴重叠,则将删除现有轴-除非新轴和现有轴的位置相同。

如果您将subplot替换为axes,那就很好了。