为什么subplot比数字快得多?

时间:2015-03-31 15:32:22

标签: performance matlab plot matlab-figure subplot

我在MATLAB中构建数据分析平台。系统的一个功能需要创建许多图。在任何给定的时间,只有一个图可用,用户可以根据请求遍历下一个/上一个(这里强调的是不需要打开多个窗口。)

最初我每次显示一个新的情节时都会使用figure命令,但是我注意到,当用户遍历下一个情节时,这个命令比我想要的要长一些。降低可用性。所以我尝试使用subplot,而且效果更快。

看到这种行为,我做了一个小实验,计时两者。第一次运行figure需要大约0.3秒,subplot需要0.1秒。 figure的平均运行时间为0.06秒,标准差为0.05,而subplot仅为0.002,标准差为0.001。 subplot似乎要快一个数量级。

问题是:在任何给定时间只有一个窗口可用的情况下,有没有理由使用数字?

使用`subplot'是否有任何价值损失总的来说?

(即使您只能进行一次,也可以进行类似的考虑)。

2 个答案:

答案 0 :(得分:3)

subplot的调用只会创建一个新的axes对象,其中包含一些方便的定位选项。

轴对象始终是图形对象的子项,因此如果没有figure窗口打开,subplot将打开一个。这个动作需要一点时间。因此,正如您正确确定的那样,不是为每个新绘图打开一个新的图形窗口,而是使用subplot创建新的轴对象更快。要保存一些记忆,您可以将clf的上一个图清除为suggested by Daniel

据我所知,你不想在平铺位置创建轴,而只是想创建一个轴对象。因此,直接使用axes命令会更快。 subplot实际上是矫枉过正。

如果您的所有绘图都具有相同的轴限制和标签,则无需clf。使用cla(清除轴)删除上一个图,但保留标签,限制和网格。

示例:

%// plot #1
plot( x1, y2 );
xlim( [0,100] ); ylim( [0,100] );
xlabel( 'x' );
ylabel( 'y' );

%// clear plot #1, keep all settings of axes

%// plot #2
plot( x2, y2 );

...

答案 1 :(得分:0)

使用figure创建一个数字,然后clf在重新绘制之前清除其内容。