首页 > 解决方案 > gnuplot:在一个窗口中的各个图之间移动,就像一个图像查看器

问题描述

有没有办法让一个 gnuplot 窗口,然后从该窗口内循环到不同的图?

为了更清楚一点,假设我想以这种方式绘制 sin(x)、cos(x) 和 tan(x)。首先,会出现一个带有 sin(x) 的窗口,然后当我按下某个键时,同一个窗口会显示 cos(x),最后,在下一次击键时,它会显示 tan(x) .

我只能找到有关在同一窗口上同时显示多个图的信息。就我而言,我的数据是每天,我有大约 300 天的时间可以查看。

这有点像在图像查看器中打开 300 张图像。您只需点击“下一步”即可查看下一个。不过,我无法导出到图像,因为我需要能够缩放和检查每个单独的图。

我正在使用 wxt,并使用 popen() 从 C 程序中调用 gnuplot,如果这很重要的话。

有人有想法么?

标签: gnuplot

解决方案


您可以pause mouse keypress在绘图后使用捕获键盘输入。关键代码将在 gnuplot 中的MOUSE_KEY变量中可用(请参阅参考资料help pause)。例如,以下绘制正弦曲线并等待键盘输入;按“a”将曲线向左移动,“d”将曲线向右移动:

set xrange [-10:10]
x0 = 0.

while 1 {
    plot sin(x-x0)
    pause mouse keypress
    print "Key pressed: ", MOUSE_KEY
    if (MOUSE_KEY == 100) {      # "d" pressed
        x0 = x0 + 0.1 }
    else {
        if (MOUSE_KEY == 97) {   # "a" pressed
            x0 = x0 - 0.1
        }
        else {
            break
        }
    }
}

这适用于X终端,但至少它似乎不适用于wxt. 我不确定是否可以将按键从wxt.

更新

也适用于wxt终端的一种可能更简单的解决方案是使用以下bind命令:

set xrange [-10:10]
x0 = 0.
bind a "x0 = x0+0.1; replot"
bind d "x0 = x0-0.1; replot"
plot sin(x-x0)

推荐阅读