Re: ColorFunction help?
- To: mathgroup at smc.vnet.net
- Subject: [mg74914] Re: ColorFunction help?
- From: "Szabolcs" <szhorvat at gmail.com>
- Date: Wed, 11 Apr 2007 01:55:49 -0400 (EDT)
- References: <evfklp$75d$1@smc.vnet.net>
On Apr 10, 11:16 am, AES <siegman at stanford.edu> wrote:
> Some time back I asked about creating what a respondent later called
> "White to Color" color functions for contour and density plots, and
> after some further experimentation I've found that if I define
>
> k1=xx; k2=yy; k3=zz;
> myPlotColor[i_] = RBGColor[1 - k1 i, 1 - k2 i, 1 - k3 i]
>
> with k1, k2, k3 each set equal to either 0 or 1, and then use
>
> ColorFunction->myPlotColor
>
> in the plot command, I get just the results I want. For example if I
> execute the seven lines (either in a single cell or as separate cells)
>
> k1 = 0; k2 = 1; k3 = 1;
>
> red[i_] = RGBColor[1 - k1 i, 1 - k2 i, 1 - k3 i];
>
> gCP = ContourPlot[(x + y)/2, {x, 0, 1}, {y, 0, 1},
> ColorFunction -> red];
>
> k1 = 1; k2 = 0; k3 = 1;
>
> green[i_] = RGBColor[1 - k1 i, 1 - k2 i, 1 - k3 i];
>
> gDP = DensityPlot[(x + y)/2, {x, 0, 1}, {y, 0, 1},
> ColorFunction -> green];
>
> Show[GraphicsArray[{{gCP, gDP}}]];
>
> I get the beautiful red ContourPlot gCP that I want from lines 1 thru
> 3; the beautiful green DensityPlot gDP that I want from lines 4 thru
> 6; and then the two of them together from line 7.
>
> What puzzles me, however, is that if I replace the string "green" by
> "red" in lines 5 and 6 above, the individual plots CP and DP from lines
> 1 thbru 6 still come out red and green as before --- but the two
> graphics produced by the Show[ ] command in line 7 now both come out
> green.
>
> The DP resulting from line 6 obviously knew it was supposed to be green
> when it was first rendered, even though its ColorFunction was
> confusingly named "red", because red[i_] had been redefined using k
> values appropriate to green in line 5. How come it forgets all about
> this when Show time comes around?
>
> [Email cc of replies welcomed]
>
> come out green**.
ContourPlot outputs a ContourGraphics object. You can check by using
FullForm that this object still contains ColorFunction->red. The
colour function is used when the graph is drawn, not when the
ContourGraphics object is generated.
You can convert it to an "expanded" graphics object by
gCP = Graphics[gCP]
In this new object the colours are hard-coded and they will not change
if you redefine red[].
Tip: use Hue[0, #, 1]& as your colour function. You can easily vary
the colour by changing the first parameter in Hue.
Szabolcs