为什么子图比图形快得多?

Why is subplot much faster than figure?

我正在使用 MATLAB 构建数据分析平台。该系统的功能之一需要创建许多地块。在任何给定时间只有一个地块可用,用户可以根据要求遍历到next/previous(这里强调的是不需要打开多个windows)。

最初我每次显示新图时都使用 figure 命令,但我注意到,当用户遍历到下一个图时,此命令花费的时间比我想要的要长一些。降低可用性。所以我尝试改用 subplot 并且它工作得更快。

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

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

通常使用“subplot”是否有任何价值损失?

(即使只能一次也可以考虑)

使用 figure 一次创建图形并 clf 在重新绘制之前清除其内容。

subplot does nothing else than creating a new axes 对象的调用带有一些方便的定位选项。

轴对象总是 图形对象的子对象,所以如果没有 figure window 打开,subplot 将打开一个。这个动作需要一点时间。因此,与其为每个新图打开一个新图形 window,不如使用 subplot 创建一个新轴对象更快,因为您确定正确。为了节省一些内存,您可以通过 clf as .

清除之前的绘图

据我了解,您不想在平铺位置创建轴,而只想创建一个轴对象。所以使用 axes command directly. subplot 会更快,实际上是矫枉过正。

如果你所有的图都有相同的轴限制和标签,甚至 clf is not necessary. Use 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 );

...