Gnuplot为数据文件

时间:2017-05-02 16:46:41

标签: animation gnuplot

我有一个数据文件包含 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

我为这个问题的新手道歉。

1 个答案:

答案 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}应该工作......