在matlab中特定图形 - 子图连接的令人费解的行为

时间:2016-02-15 16:06:55

标签: matlab plot matlab-figure subplot

我写了并使用了一个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)
...

但是我想知道是否存在更方便/更方便/优雅的东西 - 另外,如果可能的话,我很想知道更多关于这个问题的原因!

谢谢!

2 个答案:

答案 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);