在matlab中我想用新数据更新绘图,我应该选择哪种方法?
0 456
1
该提问暂无详细描述
收藏
2021-01-26 11:11 更新 karry •  4540
共 1 个回答
高赞 时间
0

简短回答:始终使用 Set('Xdata',...')。 示例代码: 复杂点说,有三种相关措施可供选择。

1.代码清晰-人们阅读你的代码容易吗? 2.运行时-每种方法执行任务的速度有多快? 3.代码可移植性-你重构代码的速度有多快? 现在,让我们分析几种可能的方法。

方法(1)-refreshdata M-lint立即发出警告 y=sin(x.^3) 为什么会这样? refreshdata使用eval并且m-lint不知道你将使用y。有人阅读你的代码,不妨完全删除此行。发生这种情况是因为你违反了封装原理。

refreshdata从调用者工作区访问变量。另一种看待这种情况的方法是,假设你将绘图的句传递给另一个函数。读者不知道你为什么写y = sin(x.^3);这句,以及它与代码的更新有何关系。

现在让我们讨论速度/运行时间。通过查看refreshdata源代码,你会注意到两个复杂的for循环,它们遍历你空间中的所有图形处理变量。这是第一个: 假设你有100个图,而你只想更新第一个图。这将非常慢,因为对于每个图,你都会尝试找到所需的图!

即使将相关的图作为参数,你仍然会有第二个循环,该循环运行eval了几次,且效率不高。

结论:难以理解,难以重构,运行缓慢

方法(2)-删除并重新绘制 这种方法对读者来说很清楚。你删除了该图,并绘制了一个新图。但是,从最后的时间比较中可以看出,这是最慢的方法。

结论:易于理解,易于重构,运行速度非常慢

方法(3)-set('XData',...,'YData') 代码真的很清晰。你想要修改绘图的两个属性,XData和YData。而这正是你要做的。另外,如下面的比较所示,代码的运行速度非常快。 由于使用了新的图形引擎hg2(R2014b及更高版本),因此,如果你喜欢该表示法,还可以使用属性语法来指定数据: 结论:易于理解,易于重构,运行速度快

以下是时间比较代码: 结果: 法一经过的时间是0.075515秒。 法二经过的时间为0.179954秒。 法三经过的时间为0.002820秒。

收藏
2021-01-26 11:47 更新 anna •  5042