Re: Just primitive ColorFunction
- To: mathgroup at smc.vnet.net
- Subject: [mg87441] Re: Just primitive ColorFunction
- From: Szabolcs Horvát <szhorvat at gmail.com>
- Date: Thu, 10 Apr 2008 02:16:35 -0400 (EDT)
- Organization: University of Bergen
- References: <ftfej7$bu7$1@smc.vnet.net> <ftfk8g$fab$1@smc.vnet.net> <fti3t8$oem$1@smc.vnet.net>
ucervan at gmail.com wrote:
> You could also use:
>
> Plot[Sin[x], {x, 0, 4 Pi}, AxesOrigin -> {0, 0}, Axes -> {True, True},
> PlotStyle -> Thick,
> ColorFunction -> (If[Sin[#] >= 0, RGBColor[1, 0, 0],
> RGBColor[0, 0, 1]] &), Filling -> Axis, ImageSize -> {380, 280},
> ColorFunctionScaling -> False, FillingStyle -> Automatic]
>
> Note that the output will be much bigger since VertexColors are
> generated for each vertex. Also, segments crossing the x axis will
> have end vertices of different colors, so some color bleeding will
> occur.
>
What is a good way to avoid this "colour bleeding" problem? If we want
to colour only the lines (but use no fillings), then this looks very ugly:
Plot[Sin[x], {x, 0, 4 Pi}, PlotStyle -> Thick,
ColorFunction -> (If[Sin[#] >= 0, RGBColor[1, 0, 0],
RGBColor[0, 0, 1]] &), ColorFunctionScaling -> False]
One solution I found is the following:
Plot[Sin[x], {x, 0, 4 Pi}, PlotStyle -> Thick,
ColorFunction -> (If[Sin[#] >= 0, RGBColor[1, 0, 0],
RGBColor[0, 0, 1]] &), ColorFunctionScaling -> False,
Exclusions -> {Pi, 2 Pi, 3 Pi}]
But Exclusions was not designed for this. I am not confortable using it
because I am afraid that it might skip a section of the curve as with
Exclusions -> {Sin[x] == 0}.
1. Is there a more appropriate way to force Plot to calculate the
function value at certain points?
2. Is there a way to avoid having to find the zeros of the function
manually? (More generally: avoid having to calculate the points where
the colouring changes abruptly.)
Szabolcs Horvát