在gnuplot脚本中如何访问范围

时间:2017-04-06 10:48:00

标签: gnuplot

我在gnuplot会话中调用一个函数,并且想知道范围以及在此函数中是否使用了logscale。怎么做 ? 谢谢

gnuplot> load 'myfunction.gnu'

文件myfunction.gnu

if "logscale" {do this};else {do that}

1 个答案:

答案 0 :(得分:0)

部分解决方案如下。假设主脚本如下:

set logscale x
set xr [10:100]

load 'my_function.gpl'

然后在my_function.gpl,你可以这样做:

set terminal push
set terminal unknown
plot 1
isLogScale = (GPVAL_X_LOG > 0)?1:0
xMin = GPVAL_X_MIN
xMax = GPVAL_X_MAX
set terminal pop

if(isLogScale){
    print "logscale"
}else{
    print "..."
}

这个想法是:

  1. 使用set terminal push
  2. 保存当前终端
  3. 使用set terminal unknown
  4. 设置“假”终端
  5. 在此终端中生成一个绘图(未绘制任何内容),以强制Gnuplot初始化其下面行中使用的内部变量
  6. 使用GPVAL_X_LOG检查日志缩放(如果尚未设置logscale则等于零)并且范围为GPVAL_X_MINGPVAL_X_MAX
  7. 使用set terminal pop
  8. 还原终端设置
  9. 使用此信息执行某些操作
  10. 但问题是,虽然set logscale x默认设置GPVAL_X_LOG为10,但unset logscale不会将其恢复为零,所以如果使用set logscale x;unset logscale,上面的代码片段无法正确处理...

    在我看来,更好的解决方案是在主脚本中引入自定义变量:

    useLogScale = 1
    
    if(useLogScale){
        set logscale x
    }
    
    set xr [10:100]
    
    load 'my_function.gpl'
    

    然后变量useLogScale也可以直接在my_function.gpl中使用。