我注意到如果我的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
答案 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');