在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
有人可以告诉我这些错误的根本原因吗?
答案 0 :(得分:1)
错误似乎是一样的。你应该尝试在这里使用debugger。在后回调函数中设置断点。但是,您的代码中存在一些问题。有些是实施问题,有些其他问题也不符合你的要求。您似乎有一些编程经验,所以我猜大多数实现问题都只是错误。我将列出问题和解决方案。
1)当我看到你使用字符串作为变量时,我哭了。 String是一种抽象类型(现在matlab中的obselete,因为后来的版本使用char
向量)。请使用其他名称,例如str
或myString
。
2)除非offset
和您的变量string
未声明为全局,否则它们不会在post_callback
的范围内。与C或C ++不同,变量在" main"中定义时不会变为全局变量。 (因为你甚至没有定义主方法)。如果您想在string
内使用offset
或post_callback
,则必须在其范围内(在函数内)定义它们。
3)循环变量i
不能是单元格。使用previous question中的方法将其转换为双向量。
4)循环变量i
必须是:
text(i,8,string(i-offset+1),'Clipping','on');
因为字符串是定义的变量而变量索引必须是整数,xLim
不一定是整数。
5)我认为text
不会在此处给出预期的输出。 text
的作用是创建一个字符串并将其链接到图上的一个点。这意味着每次缩放时,图中都会有一个新文本。除非文本位于完全相同的位置(这可能是可能的,但需要大量的工作),否则情节看起来会非常难看。如果可能,请按照示例1中的方式放置text
字符串,并将其从post_callback
中删除。