给出正负整数数组...
我想返回相对于数组中其值的绿色或红色渐变颜色。
类似于excel条件格式,绿色越接近最大值,就应该越深。如果它们更接近最小值,则重量更轻。
类似于以下图像:
当前我正在这样做
if value == Float::INFINITY
"rgba(0,255,0,1)"
elsif value > 0
"rgba(0,255,0, #{Rational(value, maximum).to_f.round(2)})"
else
"rgba(255,0,0,#{Rational(value, minimum).to_f.abs.round(2)})"
end
答案 0 :(得分:1)
假设您有一个浮点数组(或转换为浮点的字符串或BigDecimal
s):
arr = [
[25.1, 13.5, 4.3],
[28.3, 11.6, 5.9],
[16.5, 17.3, 6.4]
]
这些数字如何转换为红色和绿色阴影当然是任意的,但这是一种可能性。假设我们计算:
mn, mx = arr.flatten.minmax
#=> [4.3, 28.3]
av = (mn+mx).fdiv(2)
#=> 16.3
然后,红色调可以从28.3的255线性减少到16.3的0,绿色可以从16.3的0到4.3的线性增加:
def rg_gradient(arr)
mn, mx = arr.flatten.minmax
av = (mn+mx).fdiv(2)
above = mx-av
below = av-mn
arr.map do |a|
a.map { |n| n > av ? [(255*(n-av)/above).round, 0] :
[0, (255*(1-(av-n)/below)).round] }
end
end
rg_gradient(arr)
#=> [[[187, 0], [ 0, 195], [0, 0]],
# [[255, 0], [ 0, 155], [0, 34]],
# [[ 4, 0], [21, 0], [0, 45]]]