使用Octave(类似于Matlab),如何创建不显示的绘图?

9

Octave(Matlab)中的问题。在程序中,我有一个循环,在其中绘制数据。在每个循环结束时,我将图形保存到磁盘。在此过程中,Octave会绘制每个图形,这会减慢进程速度。我只需要将图形保存到磁盘上,不需要显示它们,只保存而不显示图形将显着加快进程速度。是否有一种方法可以将图形绘制到处理器而不将其显示出来?我使用的是scatter函数进行绘制。


4
这并不是一个重复问题,因为这涉及到的是Octave而不是Matlab。 - Ramiro
3个回答

8

这段内容与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 Kandilarov
但是必须使用fltk和非可见图形,如果您收到error: __osmesa_print__: support for offscreen rendering was disabled when Octave was built错误,则可能需要重新编译Octave。 - Rostislav Kandilarov

5

这个问题中所回答的那样,我会这样做:

f = figure('visible','off')

1
如果问题是完全重复的,最好将其关闭并附上原始问题的链接,或者如果您没有足够的积分,则在评论中添加链接。 - yuk
2
当我使用Octave进行此操作时,尝试将图形打印到文件时会失败。当我使用visible on创建图形时,可以轻松地将其打印出来。 - kaefert

2

从GNU Octave 4.0开始,OSMesa支持在GNU/Linux上进行离屏渲染。因此,现今有两种主要方法可以使figure ("visible", "off");... print (...)正常工作:

  1. 如果你没有专有的OpenGL驱动程序,而是使用基于MESA的驱动程序(如radeon、nouveau等,基本上所有自由(自由)驱动程序都基于Mesa),则可以使用基于OpenGL的工具包(qt、fltk)来进行打印,并且Octave将使用OSMesa。
  2. 使用gnuplot:graphics_toolkit gnuplot 如前所述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接