Re: ListPlot with missing values
- To: mathgroup at smc.vnet.net
- Subject: [mg22454] Re: ListPlot with missing values
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Sun, 5 Mar 2000 00:23:49 -0500 (EST)
- 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
Roy, First, the makings of a function: alist = {{1, 1}, {2, 3}, {3, 5}, {4,}, {5, 6}, {6, 8}, {7,}, {8, 10}, {9, 12}} {{1, 1}, {2, 3}, {3, 5}, {4, Null}, {5, 6}, {6, 8}, {7, Null}, {8, 10}, {9, 12}} bad = {_, Null} {_, Null} Split[alist, ! (MatchQ[#1, bad] || MatchQ[#2, bad]) &] {{{1, 1}, {2, 3}, {3, 5}}, {{4, Null}}, {{5, 6}, {6, 8}}, {{7, Null}}, {{8, 10}, {9, 12}}} DeleteCases[%, {bad}] {{{1, 1}, {2, 3}, {3, 5}}, {{5, 6}, {6, 8}}, {{8, 10}, {9, 12}}} lines = Line /@ % {Line[{{1, 1}, {2, 3}, {3, 5}}], Line[{{5, 6}, {6, 8}}], Line[{{8, 10}, {9, 12}}]} Show[Graphics[%], Frame -> True ] Now the function: SplitListPlot[lst_, bad_, opts___?OptionQ] := Show[Graphics[ Line /@ DeleteCases[ Split[lst, ! (MatchQ[#1, bad] || MatchQ[#2, bad]) &], {bad}] ], opts ] SplitListPlot[alist, {_, Null}, Frame -> True] You will find that degenerate lines like Line[{{0,0}}] with only one coordinate will show as points - this could be dealt with. Allan --------------------- Allan Hayes Mathematica Training and Consulting Leicester UK www.haystack.demon.co.uk hay at haystack.demon.co.uk Voice: +44 (0)116 271 4198 Fax: +44 (0)870 164 0565 "Roy Mendelssohn" <rmendels at pfeg.noaa.gov> wrote in message news:89ibvi$n0k at smc.vnet.net... > 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. > >