更新绘图数据的有效方法



我想在应用程序设计器中提高我的GUI的效率,即使它涉及一次前端图形生成,以节省后续视图/更新的时间。

我正在尝试更新一个 UIAxes,其中包括 4 个 patch() 句柄,以及大约 10 个引用大约 30 行的 plot3() 句柄。目标是生成数字,然后能够更新 120 个不同时间点上所有数据的位置。("播放"结果)

问题是更新一次数字大约需要 1.5 秒。更新 patch() 句柄大约比 plot3() 句柄快一个数量级。虽然我的代码不需要立即运行,但我希望它可以更新得更快(每个时间点<0.5 秒)。

我使用以下语法来更新(作为示例)我的 plot3 句柄之一,其中包括 3 个不同的行对象(因此单元格引用 {'XData'}):

set(p1.foo1,{'XData'},num2cell([foo1.fem.nds(:,1,1) foo1.tib.nds(:,1,1)],2)); 
set(p1.foo1,{'YData'},num2cell([foo1.fem.nds(:,2,1) foo1.tib.nds(:,2,1)],2)); 
set(p1.foo1,{'ZData'},num2cell([foo1.fem.nds(:,3,1) foo1.tib.nds(:,3,1)],2));

这大约需要 0.3 秒才能运行,并且只是 5 个 plot3 句柄中的 1 个。我还尝试在循环中运行 set() 命令以避免 num2cell 调用,因为我认为它更慢。不幸的是,这进一步减慢了速度。

所以我想知道是否有人熟悉另一种解决方案: 1)以比我在这里描述的更快更有效的方式更新绘图数据。 2) 预先加载所有这些图形程序集(120 个时间点,120 个图形),也许只是在我循环浏览 120 个点时通过向我的 UIAxes 添加和删除每个单独的图形来一次将它们放入我的 GUI 中。我意识到这将需要更多的记忆,但我宁愿更多的记忆而不是更多的时间。

我希望这是清楚的,任何建议将不胜感激。

似乎你在征求一般建议。如果您想要更具体的答案,请尝试创建一个最小可重现的示例。

否则,一些一般提示:

  1. 不要将数据存储在单元格中。line对象的set()方法可用于标准数字数组:基本行文档
  2. MATLAB 中的Struct有一些与之相关的开销。看起来您有多个嵌套结构保存数字数组。从该结构检索此数据可能会很慢。你总是可以使用tic/toc来查看它有多慢。但一般来说,尽可能避免使用结构,并将数值数据存储为自己的变量。有关详细信息,请参阅有关结构数组与数组结构的一些建议。

最新更新