我在MATLAB中构建数据分析平台。系统的一个功能需要创建许多图。在任何给定的时间,只有一个图可用,用户可以根据请求遍历下一个/上一个(这里强调的是不需要打开多个窗口。)
最初我每次显示一个新的情节时都会使用figure
命令,但是我注意到,当用户遍历下一个情节时,这个命令比我想要的要长一些。降低可用性。所以我尝试使用subplot
,而且效果更快。
看到这种行为,我做了一个小实验,计时两者。第一次运行figure
需要大约0.3秒,subplot
需要0.1秒。 figure
的平均运行时间为0.06秒,标准差为0.05,而subplot
仅为0.002,标准差为0.001。 subplot
似乎要快一个数量级。
问题是:在任何给定时间只有一个窗口可用的情况下,有没有理由使用数字?
使用`subplot'是否有任何价值损失总的来说?
(即使您只能进行一次,也可以进行类似的考虑)。
答案 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
在重新绘制之前清除其内容。