Re: Problems with defintion of a ContourFunction
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg1578] Re: [mg1557] Problems with defintion of a ContourFunction
- From: twj (Tom Wickham-Jones)
- Date: Sat, 1 Jul 1995 03:18:08 -0400
Martina Giarre writes:
>I have some problems in defining a ContourFunction. I cannot
>specify a color for a certain z-value in a ListContourPlot.
The values passed to the ColorFunction are scaled from the values
of the contour lines and the minimum and maximum z values of the
PlotRange. The lowest value is the midpoint between the lowest
contour and z_{min; this gets scaled to 0. The highest value is
the midpoint between the highest contour and z_max; this gets scaled
to 1. The intermediate points are the midpoints between the appropriate
contour lines. All the values are scaled with a linear function
so that the minimum and maximum values are 0 and 1 respectively.
This can be represented by the Mathematca function where vals are
the contour lines and z1 and z2 are respectively the minimum and maximum
z values of the PlotRange.
ColorFunctionValues[vals_List, {z1_, z2_}] :=
Module[{p1, p2, pf, res},
p1 = (z1 + First[vals])/2. ;
p2 = (z2 + Last[vals])/2. ;
pf = p2 - p1 ;
res =
Table[
((Part[vals, i] + Part[vals, i+1])/2. - p1)/pf,
{i,Length[vals] - 1}] ;
Join[{0}, res, {1}]
]
In the example given:
>test = Transpose[{{1,2,3,4,5,6},{1,2,3,4,5,6},
> {1,2,3,4,5,6},{1,2,3,4,5,6},
> {1,2,3,4,5,6},{1,2,3,4,5,6}}];
>
>g = {1,2,3,4,5,6};
>tc = Table[{Hue[d]},{d,0.4,1,0.1}];
>c[f_]:=While[f<=1,Hue[0.9]]
>ListContourPlot[test, PlotRange->{1,6},
> Contours->g,
> ContourStyle->tc,
> ContourShading->True,
> ContourLines->True,
> ColorFunction->c];
The c[f_] function must be wrong, this has a While, changing this
to an If defines a color function that will always return Hue[0.9],
which also probably is wrong since generally the levels
Here is a different color function, (this one prints out the argument),
and then uses the argument to pick out a color from a list.
In[19]:= c[f_] := (Print[f]; Part[ tc, Floor[6f +1.5],1])
In[20]:= test = Transpose[{{1,2,3,4,5,6},{1,2,3,4,5,6},
{1,2,3,4,5,6},{1,2,3,4,5,6},
{1,2,3,4,5,6},{1,2,3,4,5,6}}];
In[21]:= g = {1,2,3,4,5,6};
In[22]:= tc = Table[{Hue[d]},{d,0.4,1,0.1}];
In[23]:= ListContourPlot[test, PlotRange->{1,6},
Contours->g,
ContourStyle->tc,
ContourShading->True,
ContourLines->True,
ColorFunction->c];
0.1
0.3
0.5
0.7
0.9
0.
1.
which prints out the values past to the ColorFunction.
Now using the ColorFunctionValues function defined above
these values can be confirmed.
In[24]:= ColorFunctionValues[vals_List, {z1_, z2_}] :=
Module[{p1, p2, pf, res},
p1 = (z1 + First[vals])/2. ;
p2 = (z2 + Last[vals])/2. ;
pf = p2 - p1 ;
res =
Table[
((Part[vals, i] + Part[vals, i+1])/2. - p1)/pf,
{i,Length[vals] - 1}] ;
Join[{0}, res, {1}]
]
In[25]:= ColorFunctionValues[ g, {1,6}]
Out[25]= {0, 0.1, 0.3, 0.5, 0.7, 0.9, 1}
Tom Wickham-Jones
WRI