如何在gnuplot中每隔几秒钟自动重新绘制图形?

6

我有一个数据文件a.dat,每隔几秒钟就会更新。我希望每隔几秒钟在gnuplot中绘制它,以查看更改。

plot "a.dat"

什么是最简单的方法呢?谢谢。
2个回答

12

用循环来制作脚本:

while (1) {
    plot "a.dat"
    pause 1      # waiting time in seconds
}

使用gnuplot script.gp来执行它。


出于代码结构和调试的目的,你可能更喜欢以下替代方案:

plot "a.dat"

while (1) {
    replot
    pause 1
}

这样的好处是您不需要在循环内部放置一个复杂的plot命令,并且不会因为出现错误消息而导致绘图命令的行号不正确(在至少某些Gnuplot版本中会发生这种情况)。


最后,如果您的Gnuplot太旧而不支持循环,则有另一种选择:

plot "a.dat"

pause 1
reread

使用 reread 会使脚本解释器跳回到文件开头。


这种解决方案的缺点是,当gnuplot恰好在另一个应用程序写入文件时恰好读取该文件时,它可能会从a.dat中读取不完整的输入。 - Marcel
Marcel:你必须以原子方式交换文件。大多数操作系统都可以做到这一点。以下是我从Clojure中执行此操作的方法:https://gist.github.com/lnostdal/cc956e2a80dc49d8097b7c950f7213bd - lnostdal

3
如果使用命令行选项-e而不是命令脚本文件来调用gnuplot,则只能使用当前版本的绘图功能。
gnuplot -e "...plot command(s)...; while (1) { pause 1; replot; }"

在我的情况下起作用,另一个版本

gnuplot -e "...plot command(s)...; pause 1; reread;" 

在 Windows 10 上,我必须在任务管理器中终止 gnuplot 任务,因为如果我使用关闭窗口按钮关闭 gnuplot 窗口,该窗口会在一秒钟内再次打开。是否有任何更方便的方法来处理这个问题呢?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接