сплот с микшированием данных и параметров - PullRequest
2 голосов
/ 03 марта 2020

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

Пример: если у меня есть функции sin(x) и x**2 / 100, Я могу добиться этого следующим образом:

set isosamples 100
splot [-10:10] [0:1] y * sin(x) + (1-y) * (x**2 / 100)

В моем случае, однако, у меня нет функций, но есть значения из файла данных, и я не знаю, как объединить это с автоматом c значение бега как вес y в примере выше. Я пытался, например, это, но это не сработало:

splot [] [0:1] 'datafile' using 1:(y):(y * $2 + (1-y) * $3)

Я получаю ошибку undefined variable: y (что ясно). Я просто не знаю, как объединить данные из файла данных и работающего параметра.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Первая идея, которая приходит мне в голову, - это поместить «смешанные» данные в таблицу. Я надеюсь, что есть лучшие подходы.

Код:

### mixing of parameter and data
reset session

# create some test data
set table $Data
    plot '+' u 1:(sin($1)):($1**2/100.) w table
unset table

N = 20.0    # float number to avoid integer division
set table $Mix
    do for [i=0:N] {
        plot $Data u 1:(i/N):(i/N*$2 + (1-i/N)*$3) w table
        plot '+' u ("") every ::0::0 w table   # plot "empty line" to disconnect lines
    }
unset table

set view 48,9
set ztics 0.5
splot $Mix u 1:2:3 w l
### end of code

Результат:

enter image description here

0 голосов
/ 04 марта 2020

Если вам нужен только плавный переход, вы можете использовать dgrid3d

set table $Data
   plot '+' u 1:($1**2/100.) w table
   plot '+' u ("") every ::0::0 w table   # plot "empty line" to disconnect lines
   plot '+' u 1:(sin($1)) w table
unset table

set view 48,9
set ticslev 0

set dgrid3d 20,100 splines
splot $Data us 1:-1:2 w l 

Псевдостолбец -1 индексирует набор данных. enter image description here

Если ваши данные x имеют одинаковую выборку, вы можете упростить это до

set table $Data
   plot '+' u ($1**2/100.):(sin($1)) w table
unset table

set dgrid3d 20,100 splines
splot $Data matrix us ($2/10-5):1:3 w l

enter image description here

...