0

我注意到,如果我的 Matlab 代码必须显示图例,则运行时间会显着增加。
这是一个例子:

clear all
close all
clc

% legend test
x = [0:1:100];
y = x.^(3.123);

figure('Name', 'X-Y and X-X plot')
plot(x,y)
hold all
plot(x,x)
legend('1', '232')

运行时间为 1.1 秒。没有该行的相同代码legend('1', '232')的执行时间为 0.4 秒。我觉得很奇怪,一个简单的传说会增加这么多的运行时间。
使用分析器我发现主要负责时间增加的函数被调用graphics/private/texmex。它的自时间为 0.12 秒,被调用 4 次。当我不创建图例时,不会调用此函数。

有没有办法加快我的代码,同时仍然在图中生成图例?

我在 Mac OS 10.8.3 上运行 64 位 Matlab 2012b。

当我运行示例中的代码时,set(0, DefaultTextInterpreter, 'none')函数texmex由 调用tex>localCallTeXParser,由 调用scribe.legend.methods>strsize,等等......:

graphics/private/texmex
tex>localCallTeXParser
scribe.legend.methods>strsize
scribe.legend.methods>getsizeinfo
scribe.legend.methods>getsize
scribe.legend.methods
scribe.legend.legend
4

2 回答 2

3

我自己的一个项目也有同样的问题。我想使用滑块快速动态更新一些线图,但注意到激活图例确实扼杀了我获得的性能。

我在这里找到了我的问题的解决方案 - http://undocumentedmatlab.com/blog/plot-performance/

从第二个列出的性能技巧中,我添加了这些行

设置(gca,'LegendColorbarListeners',[]);

setappdata(gca,'LegendColorbarManualSpace',1);
setappdata(gca,'LegendColorbarReclaimSpace',1);

到我的代码。我收到了提到的第一行代码的错误消息,所以我在上面删除了它。无论如何,另外两行代码使我的情节更新与图例一样快,因为它们没有图例存在。

于 2013-07-05T16:16:24.773 回答
1

听起来像是legend在使用 TeX 解释器(至少,texmex听起来是这样)。在这种情况下,您可以尝试

legend({'1', '232'}, 'Interpreter', 'none');

这将禁用 TeX 解释器,因此可能会提高性能。我可能应该注意到,我从未遇到过legend函数速度方面的任何问题,因此它可能与您的绘图和/或 MATLAB 安装/版本有关。

编辑:我感觉上面会先用 TeX 解释器绘制图例,然后禁用它并再次绘制它。在绘制图例之前或在绘制图形之前尝试执行以下操作(不确定 MATLAB 会在哪一点将默认属性提升为实际的图形/轴/图例):

set(0, 'DefaultTextInterpreter', 'none');
于 2013-04-02T10:46:18.810 回答