Анимация gnuplot 2D векторные поля - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь анимировать 2D вектор с помощью gnuplot.Я хочу показать одну строку, т. Е. Один вектор за раз.

Моя структура данных выглядит следующим образом: Они x, y, u, v

2.24448 0.270645    1.00    1.00
3.24448 0.270645    0.500   1.20

Я могу создатьстатический сюжет пою следующую команду:

plot "datam.dat" using 1:2:3:4 with vectors filled head lw 3

Вот вывод: enter image description here

Вот мой вопрос: Я бы хотеланимировать и показывать одну строку (то есть) один вектор за один раз , как это сделать на графике GNU с помощью GIF?

Спасибо

1 Ответ

1 голос
/ 09 июля 2019

Анимированные GIF создаются с set terminal gif animate. Проверьте help gif для деталей. Ниже приведен простой пример (протестирован с gnuplot 5.2). Вы должны сделать новый сюжет для каждого кадра. Итак, поместите вашу команду заговора в do for -петл. С every ::i::i вы строите только i-ю линию (отметьте help every). Если вы не знаете общее количество строк вашего файла данных, введите stats "YourFile.dat", и переменная STATS_records сообщит вам это число.

Код:

### animated graph with vectors
reset session

set term gif size 300,300 animate delay 12 loop 0 optimize
set output "AnimateVectors.gif"

# create some dummy data
set angle degrees
N = 60
set samples N
set table $Data
    plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
unset table

set xrange[-2.5:2.5]
set yrange[-2.5:2.5]
do for [i=0:N-1] {
    plot $Data u 1:2:3:4 every ::i::i w vectors lw 2 lc rgb "red" notitle
}
set output
### end of code

Результат:

enter image description here

Дополнение:

Это будет неанимированная версия, например в wxt -терминале.

Код:

### non-animated graph with vectors
reset session
set term wxt size 400,400

# create some dummy data
set angle degrees
N = 60
set samples N
set table $Data
    plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
unset table

set xrange[-2.5:2.5]
set yrange[-2.5:2.5]
plot $Data u 1:2:3:4 w vectors lw 1.5 lc rgb "red" notitle
### end of code

Результат:

enter image description here

Addition2:

Может быть, вы имеете в виду что-то подобное? «Полу» анимированная стрела? Кстати, как вы можете видеть, стрелки выглядят совсем по-разному в терминалах gif и wxt.

Код:

### "semi"-animated graph with vectors
reset session
set term gif size 300,300 animate delay 12 loop 0 optimize
set output "AnimateVectorsSemi.gif"

# create some dummy data
set angle degrees
N = 60
set samples N
set table $Data
    plot [0:360] '+' u (cos($1)):(sin($1)):(sin($1)):(cos($1)) w table
unset table

set xrange[-2.5:2.5]
set yrange[-2.5:2.5]

do for [i=0:N-1] {
    plot $Data u 1:2:3:4 every ::0::i w vectors lw 1.5 lc rgb "red" notitle
}
set output
### end of code

Результат:

enter image description here

...