【问题标题】:gnuplot: prevent zoom on one axisgnuplot:防止在一个轴上缩放
【发布时间】:2023-02-24 03:49:05
【问题描述】:

可以防止在一个轴上缩放吗?
我认为,在旧版本中,set yrange [-1.1:1.1:] 确实修复了范围,而 pl [][-1.1:1.1] 只初始化了范围。

但是现在,用鼠标缩放不再考虑范围。

【问题讨论】:

  • 您在谈论哪个版本的 gnuplot?赶紧查看了4.6.0,鼠标缩放时没有固定范围。我想用鼠标缩放总是(?)同时改变 x 和 y 范围,还是我误解了什么?缩放是什么意思?在图表上打开并拖动一个矩形,例如在 wxt 或 qt 终端上,对吗?
  • 是的,也许是 ~4.6。我记不起来了。您是否尝试通过pl [] 设置范围;也许这固定了范围。也许它只是用于矩形缩放;我认为滚动缩放稍后可用。
  • 好的,正如您在问题中描述的那样,情况恰恰相反。例如。在 gnuplot4.6.0 中,plot [][-1:1] sin(x) 将在使用鼠标缩放时保持 y 范围固定。显然,这已经在 gnuplot 4.6.5 中改变了。嗯,目前我不知道如何在新版本中恢复这种行为。

标签: gnuplot


【解决方案1】:

我假设您使用的是 wxt 或 qt 终端。 以下是一种解决方法,原则上可以满足您的要求。

显然,当用鼠标缩放时,gnuplot 4.6.0 与 plot [][-1.1:1.1] sin(x) 保持固定的范围。但是,对于 gnuplot>4.6.0,此行为发生了变化。

对于较新的版本,您可以使用 while 循环和 pause mouse 来模仿这种行为。

在下面的例子中

  • 两次鼠标左键单击 (MOUSE_KEY=1) 将定义放大 x 范围和
  • 单击鼠标右键 (MOUSE_KEY=3) 会将 x 范围重置为原始范围。
  • ESC 将停止循环。

脚本:(适用于 gnuplot>=5.0.0)

### keep fixed y-range when mouse zooming
reset session

ymin = -1.1
ymax =  1.1
set yrange[ymin:ymax]

plot sin(x)

x00 = GPVAL_X_MIN
x11 = GPVAL_X_MAX
x1 = y1 = NaN
continue = 1
while (continue) {
    pause mouse keypress,button3,button1
    x0=x1;   x1=MOUSE_X
    y0=y1;   y1=MOUSE_Y
    mk = MOUSE_KEY
    if (mk==27) { continue=0 }   # press ESC to end loop
    if (mk==3)  { 
        set xrange[x00:x11]      # scale to original range
        x1=y1=NaN
    }
    if (mk==1 && x0==x0 && y0==y0) {
        xr0 = x11>x00 && x1>x0 ? x0 : x1
        xr1 = x11>x00 && x1>x0 ? x1 : x0
        set xrange[xr0:xr1]
        set yrange[ymin:ymax]
        x1=y1=NaN
    }
    replot
}
### end of script

屏幕截图:(从 wxt 终端,黄点=左键单击,红点=右键单击)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多