我正在使用Gnuplot来绘制一个像这样的简单函数
plot cos(x) lc rgb "red"
如何通过提供色调,饱和度和值(亮度)来使用HSV模型指定线条颜色。
答案 0 :(得分:1)
在gnuplot 5.0中,我们可以使用hsv2rgb函数将hsv值转换为rgb(在本文后面,我们将为早期版本编写此函数)。此函数接受0-1范围内的所有三个参数,并返回一个rgb整数。
证明这一点,我们可以做到
set samples 100
set xrange[0:10]
set style fill solid
unset key
plot '+' u 1:(sin($1)):(hsv2rgb($1/10.0,1,1)) with boxes lc rgbcolor variable
生产
显示色调,
plot '+' u 1:(sin($1)):(colorval(120/360.0,1,$1/10.0)) with boxes lc rgbcolor variable
生产
显示值。
要使用此功能选择线条颜色,我们可以
plot x lc rgbcolor hsv2rgb(90/360.0,0.8,0.3)
制造
在gnuplot 4.6中,此函数不存在,但我们可以使用hsv系统上the wikipedia entry的公式编写自己的函数。
chroma(h,s,v) = v * s
hprime(h) = h/60.0
fmod2(x) = (x>2)?(x - 2*floor(x/2.0)):x
xprime(h,s,v) = chroma(h,s,v) * ( 1 - abs(fmod2(hprime(h)) - 1))
rprime(h2,h,s,v) = (h2<1)?chroma(h,s,v):(h2<2)?xprime(h,s,v):(h2<4)?0:(h2<5)?xprime(h,s,v):chroma(h,s,v)
gprime(h2,h,s,v) = (h2<1)?xprime(h,s,v):(h2<3)?chroma(h,s,v):(h2<4)?xprime(h,s,v):0
bprime(h2,h,s,v) = (h2<2)?0:(h2<3)?xprime(h,s,v):(h2<5)?chroma(h,s,v):xprime(h,s,v)
mprime(h,s,v) = v - chroma(h,s,v)
red(h,s,v) = rprime(hprime(h),h,s,v) + mprime(h,s,v)
green(h,s,v) = gprime(hprime(h),h,s,v) + mprime(h,s,v)
blue(h,s,v) = bprime(hprime(h),h,s,v) + mprime(h,s,v)
colorval(h,s,v) = (floor(red(h,s,v)*255)*2**16) + (floor(green(h,s,v)*255)*2**8) + floor(blue(h,s,v)*255)
hsv2rgb(h,s,v) = colorval(h*360.0,s,v)
此函数与gnuplot 5.0内置函数的作用相同。我们需要自定义模数函数,因为gnuplot不能用浮点值计算模数除法。我们计算0到255范围内的红色,绿色和蓝色分量,然后将它们打包成一个整数值。