在gnuplot脚本中,如何访问范围

在gnuplot脚本中,如何访问范围,gnuplot,Gnuplot,我在gnuplot会话中调用了一个函数,并且想知道范围,以及这个函数中是否使用了logscale。怎么做? 多谢各位 gnuplot> load 'myfunction.gnu' 文件myfunction.gnu: if "logscale" {do this};else {do that} 部分解决方案如下所示。假设主脚本如下所示: set logscale x set xr [10:100] load 'my_function.gpl' 然后在my_function.gpl中,

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

gnuplot> load 'myfunction.gnu'
文件
myfunction.gnu

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

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

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 "..."
}
其想法是:

  • 使用
    设置终端按钮保存当前终端
  • 使用
    设置终端未知设置“假”终端
  • 在该终端中生成一个绘图(不绘制任何内容),以强制Gnuplot初始化其在下面几行中使用的内部变量
  • 使用
    GPVAL\u X\u log
    (如果未设置
    logscale
    ,则等于零)和
    GPVAL\u X\u MIN
    GPVAL\u X\u MAX
    范围检查日志缩放
  • 使用
    set terminal pop
  • 使用此信息执行一些操作
  • 然而,问题是,尽管
    设置logscale x
    GPVAL_x_LOG
    默认设置为10,但
    取消设置logscale
    不会将其恢复为零,因此如果使用
    设置logscale x;取消设置logscale
    ,上面的代码段将无法正确处理此问题

    我认为,更好的解决方案是在主脚本中引入自定义变量,如下所示:

    useLogScale = 1
    
    if(useLogScale){
        set logscale x
    }
    
    set xr [10:100]
    
    load 'my_function.gpl'
    
    然后变量
    useLogScale
    也可直接在
    my_function.gpl
    中使用