Skip to content

how to connect dots by passing NA

4 messages · DinoDragon, Rolf Turner, Gabor Grothendieck

#
This maybe a silly question. I'm trying to figure out a way to draw a line from a data set which contain NA. Say, I have a set of data as:

x <- c(1.1 2.2 NA 4.4 5.5)  ; y <- c(1:5) # as x,y of point a, b, c, d, and e.

I would like to plot this to a line by using dot-line to connect the two
adjacent points before and after the NA, something like: (a)______(b)......(d)______(e)

Any help will be very appreciated.
#
On 17/04/2008, at 12:56 PM, DinoDragon wrote:

            
How's this?

foo <- function(x,y,...) {
plot(x,y,type="n",...)
na <- apply(cbind(x,y),1,function(x){any(is.na(x))})
f <- c(na[-1],FALSE)
x <- x[!na]
y <- y[!na]
f <- f[!na]
n <- length(x)
f <- f[-n]
segments(x[-n],y[-n],x[-1],y[-1],lty=ifelse(f,3,1))
}

set.seed(42)
x <- sort(runif(20))
y <- rnorm(20)
ix <- sample(1:20,3)
iy <- sample(1:20,3)
x[ix] <- NA
y[iy] <- NA
foo(x,y)

	cheers,

		Rolf Turner



######################################################################
Attention:\ This e-mail message is privileged and confid...{{dropped:9}}
#
Try this which interpolates the NAs using na.approx from zoo
drawing the interpolated series with lty=3 and then overwrites
solid lines with the gaps using lines.

library(zoo)
plot(y ~ x, as.data.frame(na.approx(zoo(cbind(x, y)))), lty = 3, type = "l")
lines(y ~ x)
On Wed, Apr 16, 2008 at 8:56 PM, DinoDragon <timd_huang at yahoo.com> wrote:
#
Also, here is a similar solution, even more compact,
not involving zoo:

plot(y ~ x, na.omit(data.frame(x, y)), lty = 3, type = "l")
lines(y ~ x)

On Wed, Apr 16, 2008 at 11:18 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote: