图例传说Matlab代码执行时间加倍

时间:2013-04-02 09:37:49

标签: matlab optimization matlab-figure

我注意到如果我的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

2 个答案:

答案 0 :(得分:3)

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

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

从第二次列出的表演黑客中,我添加了行

<击>设置(GCA, 'LegendColorbarListeners',[]);

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

到我的代码。我收到了第一行代码的错误消息,所以我在上面给出了它。尽管如此,另外两行代码使得我的情节更新与传奇一样快,而没有传说存在。

答案 1 :(得分:1)

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

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

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

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

set(0, 'DefaultTextInterpreter', 'none');