如何为不同的绘图创建单个对象以避免使用clf

1视图(过去30天)
班达尔
班达尔 2021年8月7日
回答: 达洛瓦 2021年8月9日
我多次尝试在不使用clf的情况下使用plot(),因为这会导致动画闪烁[ 清除图形时,绘图正在闪烁 ],一个由@ 沃尔特·罗伯森 是更新数据,而不是为每次迭代创建一个新的绘图对象。我已设法创建以下最小的工作示例作为问题的起点。对于每个函数(即y1,y2),我需要创建一个新的gobjects,这样我就可以更新它们的数据,而不是调用clf,这会导致糟糕的结果。上述方法的问题是,我需要为每个可绘制的对象创建gobjects。在我的实际应用中,可绘制的对象是先验未知的。在模拟中,我必须根据具体情况添加它们我的问题是如何巧妙地修改下面的代码以使用共享的gobjects,同时避免使用clf。
objarray=gobjects(1,2);
x=0:0.1:1;
y1=sin(x);
y2=cos(x);
对于i=1:20
如果~ishghandle(objarray(1))
objarray(1)=绘图(x,y1,“线宽”,2);
其他的
x=0:1:i;
y1=sin(x);
objarray(1),扩展数据=x;
objarray(1)。YData=y1;
终止
如果~ishghandle(objarray(2))
如果~z~伊索尔德
持有在…上
终止
objarray(2)=绘图(x,y2,“r”,“线宽”,2);
其他的
x=0:1:i;
y2=cos(x);
objarray(2),扩展数据=x;
objarray(2)。YData=y2;
终止
轴([022-22])
暂停(.2)
终止
上面的代码可以用clf完成,如下所示,这不适用于我的案例。
对于i=1:20
clf
x=0:0.1:i;
y1=sin(x);
y2=cos(x);
图(x,y1,“线宽”,2);
持有在…上
图(x,y2,“r”,“线宽”,2);
持有
轴([022-22])
暂停(.2)
终止

答复(1)

达洛瓦
达洛瓦 2021年8月9日
这样试试
x=0:2:10;
y1=x+nan;
y2=x+nan;
h1=曲线图(x,y1,“r”);
h2=线(x,y2);
对于i=1:长度(x)
y1(i)=sin(x(i));
y2(i)=cos(x(i));
设置(h1,“伊达塔”,y1);
组(h2,“伊达塔”,y2);
暂停(0.1)
终止

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中查找宝藏,了解社区如何帮助您!

开始打猎吧!