[R] 'matplot' for matrix with NAs: broken lines

Tao Shi shitao at hotmail.com
Thu May 6 19:44:41 CEST 2010


I just found out that my "does this by default" statement (by which I was referring to the ability to automatically connect two points with a NA in the middle in a time series) is wrong!  Actually, all plotting functions, i.e. plot, matplot and xyplot, don't plot NAs.  The solution I came up with is convert the data to "long" table, remove NAs, and then use xyplot.  See example below:

set.seed(1234)
a=b=matrix(rnorm(9), 3,3)
b[2,2]=NA
matplot(a, type="b")
matplot(b, type="b")  ## I want the two "2" connected!
matplot(b, type="l")  ## Now my data for the second column are missing from the graph


## my solution
tmp1 <- data.frame(g=rep(1:3,each=3), x=rep(1:3,3),  y=c(b))
xyplot(y~x, group=g, data=tmp1, type="b", pch=c("1","2","3"))  ## there is still no line connecting two "2"s.

tmp2 <- tmp1[!is.na(tmp1$y),]
xyplot(y~x, group=g, data=tmp2, type="b")  
## this is what I want, b/c it's easier for me to keep track of both trend and missing values.  The original post was really asking whether a simple change of some parameters in matplot can do this.  Now, I guess not.

...Tao


----------------------------------------
> From: maechler at stat.math.ethz.ch
> Date: Thu, 6 May 2010 18:34:22 +0200
> To: shitao at hotmail.com
> CC: ggrothendieck at gmail.com; r-help at r-project.org
> Subject: Re: [R] 'matplot' for matrix with NAs: broken lines
>
>>>>>> "TS" == Tao Shi 
>>>>>> on Wed, 5 May 2010 20:11:26 +0000 writes:
>
> TS> Thanks, Gabor!  So, there is no way I can change some graphic parameters in 'matplot' to get this?
>
>
> TS> I forgot to mention that I purposely use type="b", so I know where the missing data are.  With imputed data, either using "b" or "l", there is no way to keep track of NAs.  Plus, in my real data sometimes there is only one non-missing value in a particular column and na.approx can't work (well I could selectively impute the NAs ... )
>
> TS> So far, my best solution to this is to use "xyplot".  It does this by default, but of course I need some data manipulation first.
>
> "does this by default" meaning what?
> I don't think it does impute missing, does it?
>
> Can you elaborate, using your example (below)?
>
> I found Gabor's answer appropriate,
> I really cannot see why matplot() should behave differently here...
>
> ----
>
> Martin Maechler
>
>
>
>
> TS> ----------------------------------------
>>> From: ggrothendieck at gmail.com
>>> Date: Wed, 5 May 2010 15:45:44 -0400
>>> Subject: Re: [R] 'matplot' for matrix with NAs: broken lines
>>> To: shitao at hotmail.com
>>> CC: r-help at r-project.org
>>>
>>> Try this:
>>>
>>> library(zoo)
>>> matplot(na.approx(b), type = "l")
>>>
>>> On Wed, May 5, 2010 at 2:30 PM, Tao Shi wrote:
>>>>
>>>> Hi list,
>>>>
>>>> I know that points involving NAs are not plotted in 'matplot', but when I plot them as lines, I still want the lines to connect all the points (i.e. not broken where there are NAs). Please see the example below. How can I achieve this in 'matplot'? If I can't, any good alternatives so I don't have to use 'plot' + 'lines' and loop through all the columns.
>>>>
>>>> Many thanks!
>>>>
>>>> ...Tao
>>>>
>>>>> set.seed(1234)
>>>>> a=b=matrix(rnorm(9), 3,3)
>>>>> b[2,2]=NA
>>>>> matplot(a, type="b")
> TS> [[elided Hotmail spam]]
>>>>> matplot(b, type="l") ## Now my data for the second column are missing from the graph
>>>>
>>>>
>>>> _________________________________________________________________
>>>> Hotmail is redefining busy with tools for the New Busy. Get more from your inbox.
>>>>
>>>> N:WL:en-US:WM_HMP:042010_2
>>>> ______________________________________________
>>>> R-help at r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>
> TS> _________________________________________________________________
> TS> Hotmail has tools for the New Busy. Search, chat and e-mail from your inbox.
>
> TS> N:WL:en-US:WM_HMP:042010_1
> TS> ______________________________________________
> TS> R-help at r-project.org mailing list
> TS> https://stat.ethz.ch/mailman/listinfo/r-help
> TS> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> TS> and provide commented, minimal, self-contained, reproducible code.
 		 	   		  
_________________________________________________________________
Hotmail has tools for the New Busy. Search, chat and e-mail from your inbox.

N:WL:en-US:WM_HMP:042010_1


More information about the R-help mailing list