Re: ColorFunctions again (making z=0 be different from z=1)
- To: mathgroup at smc.vnet.net
- Subject: [mg50495] Re: [mg50488] ColorFunctions again (making z=0 be different from z=1)
- From: "Owen, HL (Hywel)" <H.L.Owen at dl.ac.uk>
- Date: Wed, 8 Sep 2004 05:10:12 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
These functions were culled from previous posts (thanks to those people, whose names I've forgotten!): First, you will find a list of colours to be handy: << Graphics`Colors` then this function(s) is very clever: ColorQ[x_] := MemberQ[{RGBColor, GrayLevel, Hue, CMYKColor}, Head[x]]; GradientColor[x : {cols__?ColorQ}] := GradientColor[Transpose[{Range[0, Length[x] - 1]/(Length[x] - 1), x}]]; GradientColor[x : {{_, _?ColorQ} ..}] := Module[{newx = x, res, redf, greenf, xvals, cols, bluef, func}, newx = Sort[x, OrderedQ[{#1[[1]], #2[[1]]}] &]; If[newx[[1, 1]] =!= 0, PrependTo[newx, {0, newx[[1, 2]]}]]; If[N[Last[newx][[1]]] =!= 1., AppendTo[newx, {1, Last[newx][[2]]}]]; {xvals, cols} = Transpose[newx]; res = Transpose[{xvals, #}] & /@ Transpose[Apply[ List, ToColor[#, RGBColor] & /@ cols, {1}]]; {redf, greenf, bluef} = Interpolation[#, InterpolationOrder -> 1] & /@ res; func = Evaluate[RGBColor[redf[#], greenf[#], bluef[#]]] &; func]; In your plot, use: ColorFunction -> GradientColor[{Black, Red, Yellow}] replace the list of colours with whatever set you find most useful. There was a version of this code that could do a legend, but I took it out as it makes it hard to combine multiple plots. I'll see if I can find the original. Cheers, Hywel > -----Original Message----- > From: AES/newspost [mailto:siegman at stanford.edu] To: mathgroup at smc.vnet.net > Sent: 07 September 2004 10:44 > To: mathgroup at smc.vnet.net > Subject: [mg50495] [mg50488] ColorFunctions again (making z=0 be different from > z=1) > > > The simple ColorFunction->Hue option in Plot3D, ContourPlot, and > DensityPlot, makes z = 0 appear the same as z = 1 (i.e., both bright > red), a situation which seems to me to make these plots confusing > and more difficult to interpret, given that "high peaks" and "sea > level valleys" may be the most interesting features of such a plot. > > Do others have any favorite, not too messy ColorFunctions that > make values near z = 0 tend toward white, or grey, or less bright, > or something so that there's a clearly unidirectional visual > effect going from values of z near 0 to those near z = 1? > > [And as a side question, a simple Prolog or Epilog code to put > one of those scaled and labelled vertical color bars alongside a > ContourPlot or DensityPlot, perhaps with the same vertical > height as the plot itself?] >