MathGroup Archive 2000

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

Search the Archive

Re: ListPlot with missing values

  • To: mathgroup at smc.vnet.net
  • Subject: [mg22490] Re: ListPlot with missing values
  • From: Brian Higgins <bghiggins at ucdavis.edu>
  • Date: Sat, 4 Mar 2000 02:26:55 -0500 (EST)
  • Organization: Deja.com - Before you buy.
  • References: <892pd1$pj6@smc.vnet.net> <897ebc$5rc@smc.vnet.net> <89a79u$96g$1@dragonfly.wolfram.com> <89ibvi$n0k@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <89ibvi$n0k at smc.vnet.net>,
  Roy Mendelssohn <rmendels at pfeg.noaa.gov> wrote:
> First, thanks to all who answered.  I clearly didn't explain the
problem
> carefully enough.  Assume we are plotting a time series with missing
> data, and only want to conect consecutive points that have data, have
> blanks whenever a time point is missing, and still want points lined
up
> correctly in time on the x axis.  If I just delete cases, then the
> endpoints of any missing segment will be connected, rather than being
> blank.
>
> In the example
>
> alist = {{1, 1}, {2, 3}, {3,5},{4,}, {5, 6}, {6,8},{7,}, {8,10},{9,
12}}
>
> I want a line joing the first three points, then a blank, then a line
> connecting the next two points, then a blank etc.
>
> The reason I mentioned the number of datapoints is because one
solution
> is to draw a graph for each uninterrupted segment of the time series,
> and then overlay them.  This seems inelegant,because several hundred
> separate graphs might have to be drawn.
>
> If anyone else has other suggestions I would welcome them.
>
> -Roy M.
Roy,

Here is one way that makes use of the Line primitive:

plotFunc[data_List] :=
  Module[{ nullPos, dataIntervals, plotdata},
    nullPos = Flatten[Map[ # &, Position[data, {x_, Null}]]];
    dataIntervals = Map[{1 + #[[1]], -1 + #[[2]]} &,
        Partition[Insert[Insert[nullPos, 0, {1}], Length[data] + 1,
{-1}], 2, 1]];
    plotdata = Map[Take[data, #] &, dataIntervals];
    Show[Graphics[Map[Line[#] &, plotdata]], Axes -> True,
      AxesOrigin -> {0, 0}]]

In the above plot function the assumption is that  "y" data points may
be missing and have a Null value. The variable nullPos gives the
position of all the Null data points in the original data. The variable
dataIntervals defines the start and end positions of each data package
that does not have missing data. This variable is then used to select
the actual data and the result is stored in plotdata. Finally a Line
primitive is constructed for each data package

You can test the plot function by generating a sine function with  n=12
missing data as follows

mydata = Table[{x, Sin[2x]}, {x, 0, 4\[Pi], .2}];
Map[(mydata[[#]] = mydata[[#]] /. {x_, y_} -> {x, Null}) &,
  Table[Random[Integer, {1, Length[mydata]}], {12} ]]

And here is a plot:

plotFunc[mydata]

cheers,
Brian


Sent via Deja.com http://www.deja.com/
Before you buy.


  • Prev by Date: Re: Rearranging a tensor
  • Next by Date: Re: FindRoot vs Solve
  • Previous by thread: Re: ListPlot with missing values
  • Next by thread: Re: ListPlot with missing values