gnuplot animation несколько файлов данных сохраняются после цикла do - PullRequest
1 голос
/ 06 августа 2020
• 1000 * См. Ниже пример:
set term gif size 400,400 animate delay 100 loop 0 optimize font 'Verdana,10' crop
set output "output.gif"
set yrange [0:4]                                        
set xrange [0:5]

$data1 << EOD
2.24448 0.270645    1.00    1.00
3.24448 0.270645    0.500   1.20
1.24448 0.411645    0.600   1.60
EOD

$data2 << EOD
3.24448 2.50645    0.400    1.00
0.24448 2.30645    0.800   1.20
1.24448 2.50000    0.300   0.60
1.55448 2.21645    0.300   1.30
EOD

stats $data1 using 1:4 nooutput
n1 = int(STATS_records) - 1

stats $data2 using 1:4 nooutput
n2 = int(STATS_records) - 1

plot x

do for [i=0:n1] {
    replot $data1 u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "red" notitle
}

do for [i=0:n2] {
    replot $data2 u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "blue" notitle
}

set output

Результат выглядит следующим образом: Красные векторы создаются из data1, а синие векторы создаются из data2.

Я хочу сначала анимируйте красные векторы и удерживайте, а затем начните анимировать синие векторы. В нынешнем виде, когда появляется синий вектор, красный вектор исчезает и появляется снова. Я просто хочу просто начать анимацию красного вектора 1 по одному, а затем синего вектора.

См. Ниже: Красный вектор появляется, как и планировалось, но как только появляется синий вектор, красный вектор исчезает, а затем начинает анимацию , Я просто хочу следовать последовательности, сначала нарисуйте красный вектор и подождите, а затем продолжите анимацию синего вектора.

введите описание изображения здесь

1 Ответ

1 голос
/ 06 августа 2020

Думаю, replot имеет особое поведение ... (но я не помню подробностей). Поэтому я бы сделал это без replot следующим образом.

Код:

### animated vectors
reset session
set term gif size 400,400 animate delay 100 optimize font 'Verdana,10' crop
set output "output.gif"
set yrange [0:4]
set xrange [0:5]

$data1 << EOD
2.24448 0.270645    1.00    1.00
3.24448 0.270645    0.500   1.20
1.24448 0.411645    0.600   1.60
EOD

$data2 << EOD
3.24448 2.50645    0.400    1.00
0.24448 2.30645    0.800   1.20
1.24448 2.50000    0.300   0.60
1.55448 2.21645    0.300   1.30
EOD

stats $data1 using 1:4 nooutput
n1 = int(STATS_records) - 1

stats $data2 using 1:4 nooutput
n2 = int(STATS_records) - 1

plot x

do for [i=0:n1] {
    plot x, \
    $data1 u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "red" notitle
}

do for [i=0:n2] {
    plot x, \
    for [j=0:n1] $data1 u 1:2:3:4 every ::0::j w vectors lw 1.5 lc rgb "red" notitle, \
    $data2 u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "blue" notitle
}
set output
### end of code

Результат:

enter image description here

Addition: (merging 3 or more files)

Data:

File1.dat

2.24448 0.270645    1.00    1.00
3.24448 0.270645    0.500   1.20
1.24448 0.411645    0.600   1.60

File2.dat

3.24448 2.50645    0.400    1.00
0.24448 2.30645    0.800   1.20
1.24448 2.50000    0.300   0.60
1.55448 2.21645    0.300   1.30

File3.dat

4.0  1.0  -1.0   1.0
1.0  2.0   0.5   0.7
4.0  3.0  -1.0  -0.5
1.0  3.0   0.5  -1.0

Code:

### animated vectors from several files
reset session
set term gif size 400,400 animate delay 100 optimize font 'Verdana,10' crop
set output "output.gif"
set yrange [0:4]
set xrange [0:5]

set table $Arrows
    plot 'File1.dat' u 1:2:3:4:('0xff0000') w table
    plot 'File2.dat' u 1:2:3:4:('0x0000ff') w table
    plot 'File3.dat' u 1:2:3:4:('0x00ff00') w table
unset table

plot x

do for [i=1:|$Arrows|] {
    plot x, \
    $Arrows u 1:2:3:4:5 every ::0::i-1 w vec lw 1.5 lc rgb var notitle
}
set output
### end of code

Result:

введите описание изображения здесь

...