2016-07-26 53 views
0

我目前正在研究一个项目,我需要绘制一组函数并填充它们之间的区域。在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链接了我一些的方式,但我我正在用尽想法。

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

回答

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

+0

这样做。非常感谢! –

0

使用三元运算符来定义明智的红色函数。称它为f1。用fillcurves绘制f1和-f1。我认为这种方法应该做到这一点。