Re: ColorFunction in DensityPlot
- To: mathgroup at smc.vnet.net
- Subject: [mg14100] Re: ColorFunction in DensityPlot
- From: sidles at u.washington.edu (John Sidles)
- Date: Fri, 25 Sep 1998 03:15:25 -0400
- Organization: University of Washington, Seattle
- References: <6u87rm$4p3@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <6u87rm$4p3 at smc.vnet.net>,
Selwyn Hollis <shollis at peachnet.campus.mci.net> wrote:
>Let's say we're solving the heat equation on [0,1]x[0,1] numerically
>with an initial temperature distribution with values in [0,1], and
>we're displaying the solution with ListDensityPlot as it evolves over
>time. How can one specify the ColorFunction option in ListDensityPlot
>so that a temperature of 1 _always_ shows as red and a temperature of 0
>always shows as blue (with green, yellow, orange in between)? In other
>words, I need a fixed mapping between function values and color.
>
>Thanks!
>Dr. Selwyn Hollis
Dear Dr. Hollis
This is very easy to do. Here's a routine which should do exactly what
you want ...
In[1]:= <<Graphics`Colors`;
In[2]:=
myColorFunction[t_] := Module[
{ trimmedTemp,
tempMin=0.0, (* adjust to your needs *)
tempMax=1.0, (* adjust to your needs *)
hlsHue },
trimmedTemp = Min[tempMax,Max[tempMin,t]];
(* The scaling below gives red at tempMin, blue at tempMax *)
(* You can easily adjust it for other color wheel spans *)
(* Also, try varying the lightness and saturation values *)
hlsHue = 2/3 * (tempMax-trimmedTemp)/(tempMax-tempMin);
HLSColor[hlsHue,0.5,1.0]
];
Here's an example of the output of this color function:
In[3]:= myColorFunction[0.1]
Out[3]= RGBColor[0.,0.4,1.]
Note that the low temperature gives a glue-green hue, as desired.
Then in your density plot, use the option
ColorFunction -> myColorFunction
You can easily adapt the above to vary the lightness & saturation of the
colors, the range of temperatures, and the span of the color wheel you
want to cover.
Good luck! John Sidles