我有一个数据文件包含 n 坐标位置 t 时间步长 c 我希望创建一个动画的数字在使用gnuplot的gif文件中。
设置数据文件,在每个时间步骤给出所有 c 数字的 n 坐标位置,如
x1,1 y1,1
x1,2 y1,2
.
.
.
x1,n y1,n
x2,1 y2,1
.
.
.
xc,n yc,n
在每个时间步,我想在我的gif动画中绘制 c 数字的所有 n 位置。
以下代码并不完全正常。
set terminal gif animate
set output "output.gif"
do for [i=1:time_final] {
do for [j=1:c] {
plot "file.dat" every 1::(i-1)*(j-1)*n::i*j*n-1 u 1:2 w filledcurves
}}
set output
我为这个问题的新手道歉。
答案 0 :(得分:0)
我认为every
声明需要进行小幅调整。您的每个“时间步骤”都包含总共c*n
条记录。 every
关键字上下文中Gnuplot中的点编号是从0开始的。这意味着时间步i
(假设第一个i=1
循环中有do
)从(i-1)*c*n
点开始。为了移动到“数字”j
(再次假设每个时间步中的第一个具有j=1
),我们需要添加(j-1)*n
的偏移量。现在,由于每个“数字”都有n
个点,因此每个数字中最后一个点的偏移量为n-1
。总计:
do for [i=1:time_final] {
stepOffset = (i-1)*c*n
do for [j=1:c] {
firstPoint = stepOffset + (j-1)*n
lastPoint = firstPoint + (n-1)
plot "file.dat" every ::firstPoint::lastPoint u 1:2 w filledcurves
}}
如果您想将c
“数字”合并到一个图中,您可以这样做:
do for [i=1:2] {
stepOffset = (i-1)*c*n
plot for [j=1:c] "file.dat" every ::(stepOffset + (j-1)*n)::(stepOffset + (j-1)*n + (n-1)) u 1:2 w filledcurves
}
顺便说一下,由于您的数据文件只有两列,因此w filledcurves
样式似乎放错了位置,如果要填充曲线之间的区域,例如x轴,{{1}应该工作......