MATLAB - 更新gui中的情节?

ped*_*lva 4 matlab matlab-figure matlab-guide

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

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

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

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...
Run Code Online (Sandbox Code Playgroud)

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

我搜索过,但没有发现任何适用的东西.

Ole*_*uus 8

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

你的代码是一行一行的:

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

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

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

...
Error using plot Vectors must be the same lengths.
...
Run Code Online (Sandbox Code Playgroud)

Dan在上面评论中的解决方案是一种解决方法,但是在描述plot绘图的位置方面有很好的意义- 尤其是在GUI中.

您可以改为添加第四行:

set(axesHandle,'Tag','axes1');
Run Code Online (Sandbox Code Playgroud)

这会将属性设置'Tag'回,'axes1'并且按钮的任何后续点击现在也应该有效.您现在可以添加多个轴对象.如果这是你想要的.