I've used a fairly simplistic solution for
DBD::Chart: a simple linear interpolation of RGB values between 2 endpoint colors. E.g., if "cold" is blue and "hot" is yellow, then simply subdivide the value range between the 2 colors into a fixed number of slots (number of available slots depends on your graphics library and/or the app's environment). Then just interpolate each of the R, G, and B values between the endpoint values of each slot. Works surprisingly well despite its simplicity (e.g., see the quadtree display at the
DBIx::Chart homepage. I also used a similar technique to provide 3-D shading for the 3-D barcharts.)