Octave(Matlab)中的问题。在程序中,我有一个循环,在其中绘制数据。在每个循环结束时,我将图形保存到磁盘。在此过程中,Octave会绘制每个图形,这会减慢进程速度。我只需要将图形保存到磁盘上,不需要显示它们,只保存而不显示图形将显着加快进程速度。是否有一种方法可以将图形绘制到处理器而不将其显示出来?我使用的是scatter
函数进行绘制。
Octave(Matlab)中的问题。在程序中,我有一个循环,在其中绘制数据。在每个循环结束时,我将图形保存到磁盘。在此过程中,Octave会绘制每个图形,这会减慢进程速度。我只需要将图形保存到磁盘上,不需要显示它们,只保存而不显示图形将显着加快进程速度。是否有一种方法可以将图形绘制到处理器而不将其显示出来?我使用的是scatter
函数进行绘制。
这段内容与Matlab无关,只适用于Octave。
使用f = figure('visible','off')
将不能直接使用。
您需要选择一个合适的图形工具包:
available_graphics_toolkits
ans =
{
[1,1] = fltk
[1,2] = gnuplot
}
默认选项是fltk
,它不能在不显示图形的情况下写入文件。但是,如果您选择gnuplot
,它将能够在不先显示图形的情况下写入文件:
graphics_toolkit gnuplot
f = figure('visible','off')
plot(...)
axis(...)
filename=sprintf('output/%05d.png',t);
print(filename);
它并不特别快,但是如果绘图需要可见,它不会使用屏幕缓冲区或捕获鼠标。
fltk
在Octave中支持figure('visible','off')
:http://savannah.gnu.org/bugs/?33180 - Rostislav Kandilarovfltk
和非可见图形,如果您收到error: __osmesa_print__: support for offscreen rendering was disabled when Octave was built
错误,则可能需要重新编译Octave。 - Rostislav Kandilarov如这个问题中所回答的那样,我会这样做:
f = figure('visible','off')
从GNU Octave 4.0开始,OSMesa支持在GNU/Linux上进行离屏渲染。因此,现今有两种主要方法可以使figure ("visible", "off");... print (...)
正常工作:
graphics_toolkit gnuplot
如前所述。