Python Oct2Py绘图功能无响应,can';我也不会改变工具箱

Python Oct2Py绘图功能无响应,can';我也不会改变工具箱,python,octave,oct2py,Python,Octave,Oct2py,使用Linux。如果使用gnuplot工具包,我可以使用plot3倍频程函数,而不会通过命令行冻结图形。然而,当从python运行它时,使用oct2py模块,我似乎无法更改工具箱,尽管它看起来可用,因此plot3图形加载但立即冻结 倍频程代码: %works fine >graphics_toolkit('gnuplot'); >graphics_toolkit ans=gnuplot >plot3([2,1],[5,2],[10,12]) %test python代码: &

使用Linux。如果使用gnuplot工具包,我可以使用plot3倍频程函数,而不会通过命令行冻结图形。然而,当从python运行它时,使用oct2py模块,我似乎无法更改工具箱,尽管它看起来可用,因此plot3图形加载但立即冻结

倍频程代码:

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

>>>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
“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,理论上可以在
octave.eval
命令中将其明确指定为
plot\u backend
参数,例如

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参数来选择它