在gnuplot中具有多个函数的Filledcurves

时间:2016-07-26 12:09:57

标签: gnuplot

我目前正在开展一个项目,我需要绘制一组函数并填充它们之间的区域。

我尝试了不同的东西,但我无法真正开始工作。

以下是gnuplot脚本的简化版本:

f(x) = 80
g(x) = 0.35*x - 7.5
h(x) = -1.96629*x + 710
i(x) = -80
j(x) = -0.35*x + 7.5
k(x) = 1.96629*x -710

set xzeroaxis
set xtics axis
set xrange [0:500]

set yzeroaxis
set ytics axis
set yrange [-200:200] 

set border 0
plot f(x) with lines ls 1 lt rgb "red", \
g(x) with lines ls 1 lt rgb "red", \
h(x) with lines ls 1 lt rgb "red", \
i(x) with lines ls 1 lt rgb "blue", \
j(x) with lines ls 1 lt rgb "blue", \
k(x) with lines ls 1 lt rgb "blue" 

这会产生以下情节:

Plot of multiple functions 我尝试了不同的东西,this链接让我有所帮助,但我的想法已经不多了。

所以我的问题是:是否可以填充红线和蓝线之间的区域(即函数形成的凸空间)?

2 个答案:

答案 0 :(得分:1)

如果您已经知道哪些曲线是下界,哪些是上界,则可以轻松完成:

max(a,b)=(a>b)?a:b
min(a,b)=(a<b)?a:b
lowerb(x)=max(max(i(x),j(x)),k(x))
upperb(x)=min(min(f(x),g(x)),h(x))
plot "+" using 1:((lowerb($1)<upperb($1))?lowerb($1):1/0):(upperb($1)) with filledcurves

plot命令中的三元运算符只允许绘制{ lowerb(x)< y <upperb(x)}而不是{ lowerb(x) > y > upperb(x)}

如果你有很长的功能列表,应该可以使用宏自动构建lowerbupperb

答案 1 :(得分:0)

使用三元运算符定义红色函数。叫它f1。用填充曲线绘制f1和-f1。我认为这种方法应该这样做。