2

使用 Linux。如果我使用 gnuplot 工具包,我可以在不通过命令行冻结图形的情况下使用 plot3 octave 函数。但是,当从 python 运行它时,使用 oct2py 模块,我似乎无法更改工具包,尽管它看起来是可用的,所以 plot3 图形加载但立即冻结。

八度码:

%works fine
>graphics_toolkit('gnuplot');
>graphics_toolkit
ans=gnuplot
>plot3([2,1],[5,2],[10,12]) %test

蟒蛇代码:

>>>from oct2py import octave
>>>octave.availabe_graphics_toolkits()
Cell([['fltk','gnuplot']])

#try to change toolkit, doesnt seem to work
>>>octave.graphics_toolkit('gnuplot')
'fltk'
>>>octave.plot3([2,1],[5,2],[10,12]) #freezes upon loading
-23.804176753943704
4

1 回答 1

1

'fltk' 图像并没有完全“冻结”。它只需要使其“可见”(如果还没有),并且可能“刷新”。请注意,即使看起来冻结,保存也可以正常工作。

例如,这将使图片可用。

from oct2py import octave
octave.eval( " plot3([2,1],[5,2],[10,12])  " )
octave.eval( " set( gcf, 'visible', 'on' ) " )
octave.eval( " refresh                     " )

请注意,您可能还必须通过八度以编程方式“关闭”图形,即:

octave.eval( " close all                     " )

但除此之外,只要您适当地刷新,fltk 应该可以正常工作。

但是,如果您坚持使用 gnuplot,理论上您可以将其明确指定为命令plot_backend中的参数octave.eval,例如

octave.eval( " plot3([2,1],[5,2],[10,12])  ", plot_backend="gnuplot" )

在实践中,正如您所指出的,我发现 oct2py 从第一个图中重置工具包有点麻烦。但是,由于某种原因,如果您打开一个图窗并关闭它,那么从那时起,后端将受到尊重。即这对我有用:

from oct2py import octave
octave.eval( "figure" )
octave.eval( "close" )
octave.eval( "plot3([2,1],[5,2],[10,12])", plot_backend="gnuplot" )

我不知道为什么尝试从“内部”八度音程切换工具包不起作用;大概它与 oct2py 的内部不允许这样做有关。这可能解释了为什么 oct2py 的 eval 提供了一种更直接的方式来通过 python 参数来选择它。

于 2020-12-21T01:41:24.533 回答