开始使用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并没有将数据替换为绘图,但不知何故试图追加到情节?
我搜索过,但没有发现任何适用的内容。
答案 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'
,此后按钮的任何后续点击现在也可以正常工作。您现在可以添加多个轴对象。如果这是你想要的。