使用 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 gif
、help stats
和help 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
结果:
我有一个包含以下格式的移动点位置的数据文件。
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 gif
、help stats
和help 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
结果: