MATLAB - 更新gui中的情节?

时间:2012-07-09 14:25:42

标签: matlab matlab-figure matlab-guide

开始使用matlab指南,遇到了绊脚石。尽可能简单地说明我的问题就像玩具枪一样简单。 gui(名为asas)有一个按钮和一个轴。按钮的回调读取

axesHandle= findobj(gcf,'Tag','axes1');
x=rand(randi(10+20,1),4);
plot(axesHandle, x)

我没有写其他代码(指南写了) 我第一次按下按钮,一切都很好:情节完成了。第二次,我从控制台得到一个错误:

Error using plot
Vectors must be the same lengths.

Error in asas>pushbutton1_Callback (line 83)
plot(axesHandle, x)

Error in gui_mainfcn (line 96)
        feval(varargin{:});
etc...

我想绘制新数据x,替换旧数据 看起来matlab并没有将数据替换为绘图,但不知何故试图追加到情节?

我搜索过,但没有发现任何适用的内容。

1 个答案:

答案 0 :(得分:8)

解释并不简单 - 如果你是MATLAB及其处理图形子系统的新手,肯定不会。

您的代码原样,逐行:

axesHandle= findobj(gcf,'Tag','axes1');
x=rand(randi(10+20,1),4);
plot(axesHandle, x);

第一行尝试在当前数字(gcf,“获取当前数字”中)找到属性'Tag'设置为字符串'axes1'的任何子对象。我想你知道这个吗?第二行当然会生成一些随机数据来绘制。第三行绘制x中的数据。

但在plot调用之后,属性'Tag'实际上已重置为''(空字符串),这反过来使findobj在后​​续搜索中失败轴柄。因此,变量axesHandle不包含实际句柄,而是包含空矩阵[]。这将使绘图默认为另一种模式,将空矩阵解释为x轴的数据(plot的第一个参数)。这预计会导致您收到错误:

...
Error using plot Vectors must be the same lengths.
...

Dan在上述评论中的解决方案是一种解决方法,但是告诉plot在哪里绘图很有意义 - 尤其是在GUI中。

您可以改为添加第四行:

set(axesHandle,'Tag','axes1');

这会将属性'Tag'设置回'axes1',此后按钮的任何后续点击现在也可以正常工作。您现在可以添加多个轴对象。如果这是你想要的。