Я не знаю, что у gnuplot есть опция градиентной заливки, но я могу ошибаться. Ниже приведен немного «уродливый» обходной путь. Вы в основном создаете 3 участка друг над другом. Возможно, вы захотите настроить палитру, чтобы получить желаемые цвета и плавный переход.
- фиктивный график, чтобы получить палитру в качестве фона (т. Е. Поле цвета размером с график)
- покрыть часть выше оси
y>f(x)
и y>0
до x2
, а также ниже оси y<f(x)
и y<0
до x1
. - построить еще раз
f(x)
, чтобы увидеть f(x)
и снова ось тиков
Редактировать: В более ранней версии кода использовался multiplot
. Это не обязательно, просто используйте set colorbox back
. Но тогда set xzeroaxis ls -1
больше не отображается, вместо этого добавьте plot 0 w l ls -1
.
Код:
### filled curve with gradient
reset session
f(x) = sin(x)/(1+x)
fabove(x) = f(x)<0 ? 0 : f(x)
fbelow(x) = f(x)>0 ? 0 : f(x)
set samples 200
set palette defined (0 "white", 1 "red", 2 "black")
set colorbox back user origin graph 0, graph 0 size graph 1, graph 1
unset cbtics
set xrange[0:15]
set xzeroaxis ls -1
set yrange[-0.2:0.5]
plot fabove(x) w filledcurves x2 fc rgb "white" not, \
fbelow(x) w filledcurves x1 fc rgb "white" not, \
f(x) w l lw 2 lc rgb "black", \
NaN palette, \
0 w l ls -1
### end of code
Результат:
