То, что вы, вероятно, хотите сделать, - это присвоить 0–100% некоторым точкам в цветовом пространстве HSV или HSL. Оттуда вы можете интерполировать цвета (а желтый оказывается между красным и зеленым :) и конвертировать их в RGB . Это даст вам красивый градиент между ними.
Предполагая, что вы будете использовать цвет в качестве индикатора состояния и с точки зрения пользовательского интерфейса, это, вероятно, не очень хорошая идея, поскольку мы довольно плохо видим небольшие изменения цвета. Таким образом, разделение значения, например, на три-семь сегментов даст вам более заметные различия при изменении ситуации за счет некоторой точности (которую вы, скорее всего, не сможете оценить в любом случае).
Итак, если оставить в стороне всю математику, в конце я бы порекомендовал справочную таблицу со следующими цветами, где v - это входное значение:
#e7241d for v <= 12%
#ef832c for v > 12% and v <= 36%
#fffd46 for v > 36% and v <= 60%
#9cfa40 for v > 60% and v <= 84%
#60f83d for v > 84%
Они были очень наивно преобразованы из значений HSL (0,0, 1,0, 1,0), (30,0, 1,0, 1,0), (60,0, 1,0, 1,0), (90,0, 1,0, 1,0), (120,0, 1,0, 1,0 ), и вы, возможно, захотите откорректировать цвета в соответствии с вашими целями (некоторым не нравится, что красный и зеленый не являются «чистыми»).
Пожалуйста, смотрите: