我写了并使用了一个matlab程序,除其他外,它通常使用subplot命令生成大量数字。 [这些数字代表单分子实验中的分子轨迹,它们的总数预先不知道,但通常达到几百个。]到目前为止它一直运行得非常顺利,我得到以下错误信息:
使用子图时出错(第159行) 需要有效的轴句柄才能输入。
经过一些手动调试后,我认为我已经将问题分离为以下序列:
figure(i)
...
subplot(i)
我可以是任何整数。最简单的可重复示例是:
i=211;
...
x=linspace(0,1,101);
figure(i)
subplot(211)
plot(x,x)
subplot(212)
plot(x,x)
在上述情况下通过设置i = 212来同样触发问题。显然我可能很脏 - 用一些
快速解决问题if i=212 || 211
j=something-different-from-212-or-211;
else
j=i;
end
figure(j)
...
但是我想知道是否存在更方便/更方便/优雅的东西 - 另外,如果可能的话,我很想知道更多关于这个问题的原因!
谢谢!
答案 0 :(得分:2)
我怀疑它是一个"功能"您可以调用subplot
的许多方法以及旧句柄也称为数字的事实,例如以下操作失败:
figure(211); subplot(211)
figure(212); subplot(212)
但:
figure; subplot(211)
figure; subplot(212)
都没关系。
在第一篇中,Matlab正在做的是解析输入参数以确定要处理的方法。即第一个参数也可以是轴句柄。 e.g。
ax = subplot ( 211 )
% some other code and plot on other subplot
% you can then set the 1st subplot to be active again:
subplot ( ax );
这里的关键项目是subplot的第一个参数可以是很多东西......
在你原来的情况下:
figure(211);
这意味着当您将211
传入子图
subplot(211)
检查是否handle
- >它是:
figure(211)
ishandle(211)
然后检查它是否为axes
- >这是它失败的地方并触发你看到的错误。
我很少使用subplot,当我这样做时,我总是使用语法:
hFig = figure;
ax(p) = subplot(m,n,p,'Parent',hFig)
我有gui对象的句柄,并在操作时明确命名它们。
答案 1 :(得分:0)
你可以分离功能子图的参数:
figure(211);
subplot(2,1,1);