为什么子图比图形快得多?
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 );
...
我正在使用 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 );
...