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没有替换数据来绘图,但不知何故试图追加到情节?
我搜索过,但没有发现任何适用的东西.
解释并不简单 - 如果您是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'
并且按钮的任何后续点击现在也应该有效.您现在可以添加多个轴对象.如果这是你想要的.
归档时间: |
|
查看次数: |
18211 次 |
最近记录: |