MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: integrity of ListContourPlot, ListDensityPlot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg23781] Re: integrity of ListContourPlot, ListDensityPlot
  • From: Hartmut Wolf <hwolf at debis.com>
  • Date: Sat, 10 Jun 2000 02:59:26 -0400 (EDT)
  • Organization: debis Systemhaus
  • References: <8hfe7o$hlf@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

my answer below

Paul Hoke schrieb:
> 
> This question was raised after some help I received previously.
> 
> It appears that ListContourPlot and ListDensityPlot can sometimes in
> appropriately display colors if there are a few extreme points in the
> data field.
> 
> If the following notebook is run it works just fine:
> 
> "Needs <<Graphics`Legend`"
> data = Table[
>       10.*Sin[x + y]Cos[x - y], {x, xmin = -Pi, xmax = Pi, Pi/24.},
> {y,
>         ymin = -Pi, ymax = Pi, Pi/24.}];
> Plot3D[10Sin[x + y]Cos[x - y], {x, xmin, xmax}, {y, ymin, ymax},
> PlotPoints -> 25];
> ShowLegend[
>     ListContourPlot[data, ColorFunction -> (Hue[1 - #/2] &), Contours ->
> 11,
>       ContourLines -> False, DisplayFunction -> Identity], {Hue[1 - #/2]
> &,
>       11, ToString[Min[data]], ToString[Max[data]],
>       LegendPosition -> {1.1, -.4}}];
> ShowLegend[
>     ListDensityPlot[data, ColorFunction -> (Hue[1 - #/2] &), Mesh ->
> False,
>       DisplayFunction -> Identity], {Hue[1 - #/2] &, 11,
> ToString[Max[data]],
>       ToString[Min[data]], LegendPosition -> {1.1, -.4}}];
> 
> However, if the first data point is changed to -90 and then the entire
> re-plot the data, the all of the values appear to be represented
> incorrectly in the legend.  The minimum on the legend will be reported
> as -90 and all of the regions between -8 to -10 will appear as -60 when
> shaded if it is assumed that the legend applies a linear scale between
> the minimum and maximum
> Insert the following into the above notebook (the matrixform is just to
> inspect the data to just to see the raw data table)
> data[[1,1]]=-50
> MatrixForm[data]
> 
> "Needs <<Graphics`Legend`"
> data = Table[
>       10.*Sin[x + y]Cos[x - y], {x, xmin = -Pi, xmax = Pi, Pi/24.},
> {y,
>         ymin = -Pi, ymax = Pi, Pi/24.}];
> data[[1, 1]] = -90 ;
> MatrixForm[data]
> Plot3D[10Sin[x + y]Cos[x - y], {x, xmin, xmax}, {y, ymin, ymax},
> PlotPoints -> 25];
> ShowLegend[
>     ListContourPlot[data, ColorFunction -> (Hue[1 - #/2] &), Contours ->
> 11,
>       ContourLines -> False, DisplayFunction -> Identity], {Hue[1 - #/2]
> &,
>       11, ToString[Min[data]], ToString[Max[data]],
>       LegendPosition -> {1.1, -.4}}];
> ShowLegend[
>     ListDensityPlot[data, ColorFunction -> (Hue[1 - #/2] &), Mesh ->
> False,
>       DisplayFunction -> Identity], {Hue[1 - #/2] &, 11,
> ToString[Max[data]],
>       ToString[Min[data]], LegendPosition -> {1.1, -.4}}];
> 
> if anybody has any input regarding this phenomena, I would greatly
> appreciate it.
> 

Dear Paul,

that behaviour might appear as a riddle, yet finer observation will 
resolve it!

First I'd like tho call you fixed data differently:

data = Table[10.*Sin[x + y]Cos[x - y], 
             {x, xmin = -Pi, xmax = Pi, Pi/24.}, 
             {y, ymin = -Pi, ymax = Pi, Pi/24.}];

cdata = ReplacePart[data, -90, {1, 1}];

Then _look_ at you data with all means you have! ok, you took MatrixForm[cdata],
but also make a

ListPlot3D[cdata, Mesh -> False, ViewPoint -> {-0.7, -1.7, 1.}];

You already might have seen something! Look at the axes, z-Axis only goes 
from -20. to +10. !!!!!

Now take your Density Plot:

ShowLegend[
    ldp = ListDensityPlot[cdata, ColorFunction -> (Hue[1 - #/2] &), 
        Mesh -> False, DisplayFunction -> Identity], {Hue[1 - #/2] &, 11, 
      "don't", "know", LegendPosition -> {1.1, -.4}}];

and then look at

FullOptions[ldp, PlotRange]

{{-0.98, 49.98}, {-0.98, 49.98}, {-20., 10.}}

!!!!! Now,

(1) the scaling of the color function is done according to PlotRange ({-20,10.} here)

(2) values outside the bounds are clipped to the bound (see Help for Raster)


So you have two choices:

(1) Force your Plot to have the PlotRange you want:

ShowLegend[
    ListDensityPlot[cdata, ColorFunction -> (Hue[1 - #/2] &), Mesh -> False, 
      DisplayFunction -> Identity, PlotRange -> {-90, 10}], {Hue[1 - #/2] &, 
      11, ToString[Min[data]], ToString[Max[data]], 
      LegendPosition -> {1.1, -.4}}];

(2) Adapt your Legend to real color function behaviour:

Module[{ldp, low, high}, 
    ShowLegend[
      ldp = ListDensityPlot[cdata, ColorFunction -> (Hue[1 - #/2] &), 
          Mesh -> False, DisplayFunction -> Identity], 
      {low, high} = ToString /@ FullOptions[ldp, PlotRange][[3]];
      low = "<=" <> low;
      {Hue[1 - #/2] &, 7, low, high, LegendPosition -> {1.1, -.4}}]];

Kind regards, 
	Hartmut Wolf



  • Prev by Date: Re: DeleteRepetitions summary
  • Next by Date: Plot List of {{x1,y1,z1}, {x2,y2,z2},...}
  • Previous by thread: integrity of ListContourPlot, ListDensityPlot
  • Next by thread: DeleteRepetitions summary