2016-02-15 21 views
1

我编写并使用了一个matlab程序,其中通常使用子图命令生成大量图形。 [这些数字代表单分子实验中的分子轨迹,它们的总数并不是预先知道的,但通常达到几百个。]迄今为止它工作得非常顺利,我得到以下错误信息:matlab中特定图形 - 副图连接处的令人费解的行为

错误使用子图(第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

您是用多轴(子图)还是多轴图创建多个图形? – Erik

+0

我正在用多个轴创建多个图形。 通常,我有一个循环运行在上面的索引i上,对于每个我打开一个包含通常2,3或4个子图(取决于)的图。 (我不想关闭先前生成的数字) –

+0

您确定您应该同时使用'figure(i)'和'subplot(i)',并使用相同的索引变量'i'吗?在所有这些数字中,您可能没有相同数量的数字和轴数。如果你有'N'图形,那么用'figure(n)'来改变/创建数字,如果图中有'M'轴,则使用'n = 1:N',然后对这些图形使用不同的子图索引变量'M'轴(取决于子图布局:子图轴的列数和行数)。 – Erik

回答

2

我怀疑的许多方面,你可以打电话subplot而事实上,老把手也被称为数字,例如下面的一个“特点”失败:

figure(211); subplot(211) 
figure(212); subplot(212) 

但:

figure; subplot(211) 
figure; subplot(212) 

都可以。

在第一个Matlab中,Matlab正在做的是分析输入参数以确定处理方式。即第一个参数也可以是一个轴手柄。例如

ax = subplot (211) 
% some other code and plot on other subplot 
% you can then set the 1st subplot to be active again: 
subplot (ax); 

这里的关键项目是第一参数插曲可以是很多东西......

在你那里,你有原来如此:

figure(211); 

这意味着,当你通过在211中转入该子区域

subplot(211) 

它检查是否它的一个handle - >,它是:

figure(211) 
ishandle(211) 

然后检查,看看它的axes - >这是它失败,并触发您看到的错误。

我很少在所有使用的插曲,当我做我一直使用的语法:

hFig = figure; 
ax(p) = subplot(m,n,p,'Parent',hFig) 

在那里我有把手GUI对象并在其上运行时,明确他们的名字。

+0

感谢这个详细的答案,它启发了整个事情。 (并看到第一篇文章对“适当的语法”的评论) –

+0

没问题 - 这是一个古怪的问题,看看! :) – matlabgui