Reread命令使gnuplot中的动画失真

Reread命令使gnuplot中的动画失真,plot,dynamic,gnuplot,Plot,Dynamic,Gnuplot,我正在尝试在主程序中动态更新数据文件的实时绘图。我正在使用以下.plt文件进行绘图 set pm3d map set xrange[ -6.0000000000000000 : 6.0000000000000000 ] set yrange[ -6.0000000000000000 : 6.0000000000000000 ] sp'fpf.dat'u 1:2:3 w pm3d pause 0.1 reread 但在运行程序时,我

我正在尝试在主程序中动态更新数据文件的实时绘图。我正在使用以下.plt文件进行绘图

 set pm3d map
 set xrange[  -6.0000000000000000      :   6.0000000000000000      ]
 set yrange[  -6.0000000000000000      :   6.0000000000000000      ]
 sp'fpf.dat'u 1:2:3 w pm3d
 pause 0.1
 reread
但在运行程序时,我获得的动画正在被扭曲。


我认为问题的出现是因为当文件被动态更新时,甚至在gnuplot能够使用临时存储的数据生成完整的绘图之前,文件被一次又一次地更新。解决方案是什么?

首先,我建议不要使用REREREAD,而是创建一个您有更多控制权的循环

set pm3d
set view map
while (some-condition) {
  sp'fpf.dat'u 1:2:3 w pm3d
  pause 0.1
}
现在我想到了几个选择

1创建数据的程序可能会将以前的数据重写到位 而不是每次都创建或截断文件

2在数据文件创建和后续绘图之间使用显式同步,而不是基于每十分之一秒刷新一次将gnuplot放入循环中。根据您的环境和您对所涉及程序的控制,有许多方法可以做到这一点。例如,您可以使用第二个循环替换pause语句,该循环将一直旋转,直到数据文件修改时间发生更改为止。具体命令取决于您的操作系统和shell

oldtime = timestamp
while (timestamp == oldtime) {
    timestamp = system( "stat --format=%X file.dat" )
    pause 0.1
}
# we exited the previous loop because the file timestamp changed

3在开始循环之前,您可以尝试使用multiplot mode set multiplot,以便在上一个绘图的基础上绘制每个新绘图,而不是替换它。如果您的诊断是正确的,白色部分是由于不完整的数据造成的,那么您将看到上一个绘图的内容,而不是空白区域。

首先,我建议不要使用重新读取,而是创建一个您有更多控制权的循环

set pm3d
set view map
while (some-condition) {
  sp'fpf.dat'u 1:2:3 w pm3d
  pause 0.1
}
现在我想到了几个选择

1创建数据的程序可能会将以前的数据重写到位 而不是每次都创建或截断文件

2在数据文件创建和后续绘图之间使用显式同步,而不是基于每十分之一秒刷新一次将gnuplot放入循环中。根据您的环境和您对所涉及程序的控制,有许多方法可以做到这一点。例如,您可以使用第二个循环替换pause语句,该循环将一直旋转,直到数据文件修改时间发生更改为止。具体命令取决于您的操作系统和shell

oldtime = timestamp
while (timestamp == oldtime) {
    timestamp = system( "stat --format=%X file.dat" )
    pause 0.1
}
# we exited the previous loop because the file timestamp changed
3在开始循环之前,您可以尝试使用multiplot mode set multiplot,以便在上一个绘图的基础上绘制每个新绘图,而不是替换它。如果您的诊断正确,白色部分是由于数据不完整造成的,那么您将看到上一个绘图的内容,而不是空白区域