Построение GIF из одного файла данных - PullRequest
0 голосов
/ 05 мая 2020

Привет, ребята, я новичок в gnuplot и хочу построить гифку, представляющую эволюцию некоторых вероятностей с циклами. Мой файл данных структурирован следующим образом:

0   0   1   3.56133e-008    2   1.18619e-007    3   3.75373e-007 ...
0   0   1   3.56133e-008    2   2.26246e-008    3   1.44814e-007 ...

Первая строка представляет цикл 0, а первый и второй столбцы представляют позицию 0 и ее вероятность. Количество позиций велико, поэтому выполнение этого вручную займет слишком много времени.

Я получил это сейчас, но я действительно не знаю, как сделать для l oop с такими данными.

set terminal gif 
set output 'Probability.gif'
stats 'Probability.txt' nooutput
set xlabel 'Position'
set ylabel 'Probability'
set yrange [0:1]
set style fill solid border -1
unset key

Заранее спасибо, любая помощь приветствуется.

1 Ответ

0 голосов
/ 06 мая 2020

Что вы можете сделать, так это извлечь все пары x и y из каждой строки и вывести их в таблицу. На самом деле gnuplot предпочитает иметь данные в столбцах. Затем перенесите эту таблицу в терминал gif с опцией animated. Проверить help gif. Если у вас есть файл, удалите блок данных $Data <<EOD ... EOD и в коде замените (2 раза) $Data на "YourFilename".

Код:

### animated rows x0 y0 x1 y1 x2 y2
reset session

$Data <<EOD
0 0.00   1 0.10   2 0.20   3 0.40   4 0.20   5 0.10   6 0.00
0 0.00   1 0.08   2 0.18   3 0.48   4 0.18   5 0.08   6 0.00
0 0.00   1 0.05   2 0.16   3 0.58   4 0.16   5 0.05   6 0.00
0 0.00   1 0.08   2 0.18   3 0.48   4 0.18   5 0.08   6 0.00
0 0.00   1 0.10   2 0.20   3 0.40   4 0.20   5 0.10   6 0.00
EOD

stats $Data nooutput
ColCount = STATS_columns
RowCount = STATS_records

set xrange[0:6]
set yrange[0:1]

set terminal gif size 400,400 animate delay 50 optimize
set output "myAnimation.gif"

do for [j=0:RowCount-1] {
    set table $Extract
        plot for [i=1:ColCount/2] $Data u (column(2*i-1)):(column(2*i)) every ::j::j w table
    unset table
    plot $Extract u 1:2 w lp pt 7 lw 2 title sprintf("Row %d",j)
}
set output
### end of code

Результат:

enter image description here

...