使用 gnuplot 绘制轨迹

Plotting trajectory with gnuplot

我有一个包含以下格式的移动点位置的数据文件。

x1  y1
x2  y2 
x3  y3
.
.
.

我希望在 gnuplot 中使用这些数据制作动画轨迹。我该怎么做?

我试过了

do for [i=1:20] {
plot "temp.dat" every ::i using 1 : 2 w p
}

但它将所有点绘制在单个图像中,而不是动画中。这样做的方法是什么?

如果你只是想让动画显示在屏幕上,那么你的代码就可以了,只是你需要在连续的帧之间添加一个延迟:

do for [i=1:20] {
    plot "temp.dat" every ::i using 1 : 2 w p
    pause 0.1   # 1/10 second between frames
}

如果您正在制作动画 gif 文件,则暂停不会进入循环本身,它会成为 set term 命令的参数:

set term gif animate delay 10    # 10 = 10 units of 0.01 seconds
set output 'animation.gif'
do for [i=1:20] {
    plot "temp.dat" every ::i using 1 : 2 w p
}

当我在编码时被打扰了...@Ethan 的回答已经包含了所有必要的成分,但我 post 我的回答仍然有一些视觉演示... 检查help gifhelp statshelp every,这些是主要的"components"。 在下面的示例中,您希望能找到您要查找的内容。

代码:

### trajectory animated
reset session

# create some test data
v = 40
a = 45
g = 9.81
set print $Data
    do for [i=0:86] {
        t = i/10.
        sx(t) = v*cos(a)*t
        sy(t) = v*sin(a)*t - 0.5*g*t**2 
        print sprintf("%.3f %.3f",sx(t),sy(t))
    }
set print

set xrange[0:200]
set yrange[0:80]

set term gif size 400,300 animate delay 5 optimize
set output "Trajectory.gif"

stats $Data nooutput
N = STATS_records
do for [i=0:N-1] {
    plot $Data u 1:2 every ::::i w l notitle, \
         '' u 1:2 every ::i::i w p pt 7 lc rgb "red" notitle
}
set output
### end of code

结果: