[R-sig-Geo] Dont show zero values in line graph

Edzer Pebesma edzer.pebesma at uni-muenster.de
Fri Jan 7 11:56:16 CET 2011



On 01/07/2011 09:43 AM, Rainer M Krug wrote:
> On 01/07/2011 08:43 AM, Edzer Pebesma wrote:
> 
> 
>> On 01/07/2011 04:11 AM, jroll wrote:
>>>
>>> Hey everyone,
>>>    Im getting better at plotting my data but cant for the life of me figure
>>> out how to show a line graph with missing data that doesnt continue the line
>>> down to zero then back up to the remaining values.
>>>
>>> Consider the following
>>> x<-c(1:5,0,0,8:10)
>>> y<-1:10
>>>
>>> plot(0,0,xlim=c(0,10), ylim=c(0,10),type="n",main="Dont show the bloody 0
>>> values!!")
>>> lines(x~y, col="blue", lwd=2,)
>>>
>>> My data is missing the 6th and 7th values and they come in as NA's so i
>>> change them to 0s but then the plot has these ugly lines that dive toward
>>> the x axis then back up.  I would do bar plots but i need to show multiple
>>> sets of data on the same and side by side bars doesnt do it for me.  
>>>
>>> So i need a line graph that starts and stops where 0s or missing values
>>> exist.  Thoughts?
> 
>> x<-c(1:5,NA,NA,8:10)
>> y<-1:10
> 
>> plot(0,0,xlim=c(0,10), ylim=c(0,10),type="n",main="Dont show the bloody 0
>> values!!")
>> lines(x~y, col="blue", lwd=2,)
> 
> And just to complete it: to replace all the 0 in x with NA, you can do
> 
> x[x==0] <- NA
> 
> There is also the is.na() function which should do this, i.e.
> 
> is.na(x) <- 0
> 
> should (in my understanding) set all 0 values in x to NA - but it dose
> not work, whereas setting e.g. all the 4s to NA works:
> 
>> x<-c(1:5,0,0,8:10)
>> is.na(x) <- 0
>> x
>  [1]  1  2  3  4  5  0  0  8  9 10
>> is.na(x) <- 4
>> x
>  [1]  1  2  3 NA  5  0  0  8  9 10
> 
> 
> Why is this? Is this a bug in R or in y understanding?

try ?is.na:

Usage:

     NA
     is.na(x)
     ## S3 method for class 'data.frame'
     is.na(x)

     is.na(x) <- value

Arguments:

       x: an R object to be tested: the default method handles atomic
          vectors, lists and pairlists.

   value: a suitable index vector for use with ‘x’.

so,

is.na(x) <- 0

does nothing, as 0 is not a suitable index vector:

> x = 1:10
> x[0]
integer(0)

x[5] = 0
is.na(x) <- x == 0
x
 [1]  1  2  3  4 NA  6  7  8  9 10

does what you wanted, I believe.

> 
> Cheers,
> 
> Rainer
> 
>>>
>>> JR 
> 
> 
> 

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763  http://ifgi.uni-muenster.de
http://www.52north.org/geostatistics      e.pebesma at wwu.de



More information about the R-sig-Geo mailing list