Можно ли определить функции, которые работают с входными данными - PullRequest
5 голосов
/ 28 ноября 2011

Интересно, есть ли какой-нибудь обходной путь в Gnuplot для обмена чем-то вроде

plot  input.dat using ($1/2):($2*2) axis x1y1 w lp

с

plot  input.dat using func1($1,$2):func2($1,$2) axis x1y1 w lp

с

func1(x,y) = x/2; func2(x,y) = y*2;

Я хотел бы постобработать свои входные данные (линии) перед построением графика.

Ответы [ 2 ]

9 голосов
/ 28 ноября 2011

Вы можете, используя синтаксис, очень близкий к тому, что вы предложили.Определите функции следующим образом:

func1(x) = x / 2
func2(x) = x * 2

И используйте их следующим образом:

 plot "input.dat" using (func1($1)):(func2($2))

Этот узел скобок необходим в операторе plot.

Вы можете определитьфункции более чем одной переменной:

func3(x, y) = x * y

Они используются аналогично:

plot "input.dat" using (func1($1)):(func3($1, $2))
3 голосов
/ 28 ноября 2011

Вы можете использовать функции в gnuplot. Документально здесь .

Как пример:
С файлом данных Data.csv :

0.65734 0.59331
0.60033 0.76434
0.66493 0.43881
0.42811 0.42567
0.01783 0.57760

Вы можете построить данные, используя такие функции:

func1(x) = x/2
func2(x,y) = y*2

plot "Data.csv" u (func1($1)):(func2($1, $2)) w l

Обратите внимание на «лишние» скобки вокруг func1($1) и func2($1, $2). Они говорят gnuplot оценить выражение внутри них.

...