Сочетание Acspline с заполненной кривой на данных - PullRequest
2 голосов
/ 17 февраля 2020

Я знаю, как использовать filledcurve с using 1:2:3, чтобы заполнить область между кривыми, описанными в столбцах 2 и 3.

Я также знаю, как сгладить одну кривую, используя acsplines с using 1:2:(0.1)0.1 является сглаживающим весом для каждой точки).

Но я не могу объединить два, то есть заполнить область между двумя сглаженными кривыми. Все варианты, которые я пробую, выдают мне сообщения об ошибках типа duplicated or contradicting arguments in datafile options.

Это то, что я пробовал:

plot 'datafile' using 1:2:3:(0.1):(0.1) smooth acs with lines
plot 'datafile' using 1:2:(0.1):3:(0.1) smooth acs with lines

Возможна ли эта комбинация вообще? Как тогда синтаксис?

1 Ответ

3 голосов
/ 17 февраля 2020

Я думаю, вы не можете объединить smooth acspline и with filledcurves, но я также не знаю, почему это не должно быть возможно. Ну, как обходной путь, сначала нарисуйте свою smooth acspline кривую в таблицу данных, а затем нарисуйте ее with filledcurves.

Код:

### filled acspline curve
reset session

$Data <<EOD
1 2
2 4
3 3
4 1
EOD

# plot your acspline data into a table
set table $ACSpline
    plot $Data u 1:2 smooth acspline
unset table

set style fill transparent solid 0.1 

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Original data", \
     $Data u 1:2 smooth acspline lw 2 lc rgb "red" ti "acspline", \
     $ACSpline u 1:2 w filledcurves x1 lc rgb "red" ti "acspline filled"
### end of code

Результат:

enter image description here

Добавление:

Существует еще один способ получения данных в Таблица. Проверьте help set print. При этом вы можете получить данные двух сплайнов в один блок данных и построить участок между ними. Может быть, кто-то знает более простой способ добиться этого.

Код:

### filled curve between two acsplines
reset session

$Data <<EOD
1 2 4
2 4 1
3 3 0
4 1 3
EOD

# plot your acspline data into tables
set table $ACSpline1
    plot $Data u 1:2:(1) smooth acspline
unset table
set table $ACSpline2
    plot $Data u 1:3:(1) smooth acspline
unset table
set print $BetweenSplines
    do for [i=1:|$ACSpline1|] {
        print sprintf("%s %s %s",word($ACSpline1[i],1),word($ACSpline1[i],2),word($ACSpline2[i],2))
    }
set print

set style fill transparent solid 0.5 

plot $Data u 1:2 w lp pt 7 lc rgb "black" ti "Original data col 2", \
     $Data u 1:3 w lp pt 7 lc rgb "blue" ti "Original data col 3", \
     $ACSpline1 u 1:2 w l lw 2 lc rgb "red" ti "acspline col 2", \
     $ACSpline2 u 1:2 w l lw 2 lc rgb "green" ti "acspline col 3", \
     $BetweenSplines u 1:2:3 w filledcurves lc rgb "yellow" ti "acspline filled"
### end of code

Результат:

enter image description here

...