Чтобы заполнить части ниже кривой, вы должны использовать стиль filledcurves
. С опцией x1
вы заполняете часть между кривой и осью x.
Чтобы заполнить только части кривой, вы должны отфильтровать свои данные, т.е. присвоить значениям x значение 1/0
(недопустимая точка данных), если они находятся за пределами желаемого диапазона, и правильное значение из файла данных в противном случае. В конце вы строите саму кривую:
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
'' using 1:2 with lines lw 3 lt 1 title 'curve'
Это заполняет диапазон [-1:0.5]
и [0.2:0.8]
.
Чтобы привести рабочий пример, я использую специальное имя файла +
:
set samples 100
set xrange [-2:2]
f(x) = -x**2 + 4
set linetype 1 lc rgb '#A3001E'
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot '+' using (filter($1, -1, -0.5)):(f($1)) with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):(f($1)) with filledcurves x1 lt 1 notitle,\
'' using 1:(f($1)) with lines lw 3 lt 1 title 'curve'
В результате (с 4.6.4):
![введите здесь описание изображения](https://i.stack.imgur.com/F6RTK.png)
Если вам необходимо использовать какое-либо сглаживание, фильтр может по-разному влиять на кривую данных в зависимости от отфильтрованной части. Вы можете сначала записать сглаженные данные во временный файл, а затем использовать его для «нормального» построения:
set table 'data-smoothed'
plot 'data' using 1:2 smooth bezier
unset table
set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data-smoothed' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
'' using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
'' using 1:2 with lines lw 3 lt 1 title 'curve'
person
Christoph
schedule
04.06.2014