matlab缩放与文本功能相关的回调错误

时间:2014-08-04 08:36:17

标签: matlab

在Matlab中尝试在后缩放回调函数中执行一系列文本框的生成时,会生成许多错误,其中的错误在诊断和解决问题时无益。当文本生成在代码的主体中时,如下所示,代码正确执行,并且执行最小的缩放后回调函数没有问题:

string='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
offset=8;
h=figure;
z=zoom(h);
set(z,'ActionPostCallback',@post_callback);
[ax,plt1,plt2]=plotyy(14:20,1:7,15:17,1:3,@bar,@bar)
ylim([0 10]);
hold on;
set(plt2,'FaceColor','r');
xLim=xlim(gca);
for i=xLim(1)+1:xLim(2)-1
    text(i,8,string(i-offset+1),'Clipping','on');
end



function post_callback(obj,evd)
    xLim = get(evd.Axes,'XLim');

但是,如果文本框生成移动到@post_callback函数,则会产生一系列错误:

string='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
offset=8;
h=figure;
z=zoom(h);
set(z,'ActionPostCallback',@post_callback);
[ax,plt1,plt2]=plotyy(14:20,1:7,15:17,1:3,@bar,@bar)
ylim([0 10]);
hold on;
set(plt2,'FaceColor','r');



function post_callback(obj,evd)
xLim = get(evd.Axes,'XLim');
for i=xLim(1)+1:xLim(2)-1
    text(i,8,string(i-offset+1),'Clipping','on');
end

这些错误如this problem

中所述
Warning: An error occurred during the mode callback. 
  > In uitools.uimode.fireActionPostCallback at 14
  In zoom>local2DButtonUpFcn at 1332
  In hgfeval at 63
  In uitools.uimode.modeWindowButtonUpFcn at 46
  In uitools.uimode.setCallbackFcn>localModeWindowButtonUpFcn at 58

有人可以告诉我这些错误的根本原因吗?

1 个答案:

答案 0 :(得分:1)

错误似乎是一样的。你应该尝试在这里使用debugger。在后回调函数中设置断点。但是,您的代码中存在一些问题。有些是实施问题,有些其他问题也不符合你的要求。您似乎有一些编程经验,所以我猜大多数实现问题都只是错误。我将列出问题和解决方案。

1)当我看到你使用字符串作为变量时,我哭了。 String是一种抽象类型(现在matlab中的obselete,因为后来的版本使用char向量)。请使用其他名称,例如strmyString

2)除非offset和您的变量string未声明为全局,否则它们不会在post_callback的范围内。与C或C ++不同,变量在" main"中定义时不会变为全局变量。 (因为你甚至没有定义主方法)。如果您想在string内使用offsetpost_callback,则必须在其范围内(在函数内)定义它们。

3)循环变量i不能是单元格。使用previous question中的方法将其转换为双向量。

4)循环变量i必须是:

中的整数
text(i,8,string(i-offset+1),'Clipping','on');

因为字符串是定义的变量而变量索引必须是整数,xLim不一定是整数。

5)我认为text不会在此处给出预期的输出。 text的作用是创建一个字符串并将其链接到图上的一个点。这意味着每次缩放时,图中都会有一个新文本。除非文本位于完全相同的位置(这可能是可能的,但需要大量的工作),否则情节看起来会非常难看。如果可能,请按照示例1中的方式放置text字符串,并将其从post_callback中删除。