Re: [R] Smooth contour of a map

From: Pierre Bruyer <pbruyer_at_agaetis.fr>
Date: Tue, 17 May 2011 15:35:39 +0200

I work with large datasets (10000 points) so I can't post them , but my function is :

create_map <- function(grd, level ,map_output, format = c("jpeg"), width_map = 150, height_map = 150,...) {                 

        ##sp <- spline(x = grd[,1], y = grd[,2])

        grd2 <- matrix(grd[,3], nrow = sqrt(length(grd[,3])), ncol = sqrt(length(grd[,3])), byrow = FALSE)         

        V2b <- grd2         

	##creation of breaks for colors
	i<-1	
	paliers <- c(-1.0E300)
	while(i<=length(level[,1]))
	{
		paliers <- c(paliers,level[i,1])
		i <- i+1
	}
	paliers <- c(paliers, 1.0E300)
		
	##scale color creation
	i <- 1
	colgraph <- c(rgb(255,255,255, maxColorValue = 255))
	while(i<=length(level[,2]))
	{
		colgraph <- c(colgraph, rgb(level[i,2],level[i,3],level[i,4], maxColorValue = 255))
		i <- i +1
	}

	##user can choose the output format (default is jpeg)
	switch(format, 
		png = png(map_output, width = width_map, height = height_map) ,
		jpeg = jpeg(map_output, width = width_map, height = height_map, quality = 100),
		bmp = bmp(map_output, width = width_map, height = height_map),
		tiff = tiff(map_output, width = width_map, height = height_map),
		jpeg(map_output, width = width_map, height = height_map))

	## drawing map
	
	##delete marge
	par(mar=c(0,0,0,0))
	filled.contour(V2b, col = colgraph, levels = paliers, asp = 1, axes = FALSE, ann = FALSE)
	dev.off() 		

}

where grd is a xyz data frame,
map_output is the path+name of the output image file, and level is a matrix like this :

level <- matrix(0,10,4)

level[1,1] <- 1.0000E+00
level[2,1] <- 3.0000E+00
level[3,1] <- 5.0000E+00
level[4,1] <- 1.0000E+01
level[5,1] <- 1.5000E+01
level[6,1] <- 2.0000E+01
level[7,1] <- 3.0000E+01
level[8,1] <- 4.0000E+01
level[9,1] <- 5.0000E+01
level[10,1] <- 7.5000E+01


level[1,2] <- 102
level[2,2] <- 102
level[3,2] <- 102
level[4,2] <- 93
level[5,2] <- 204
level[6,2] <- 248
level[7,2] <- 241
level[8,2] <- 239

level[9,2] <- 224
level[10,2] <- 153
level[1,3] <- 153
level[2,3] <- 204
level[3,3] <- 204
level[4,3] <- 241
level[5,3] <- 255
level[6,3] <- 243
level[7,3] <- 189
level[8,3] <- 126
level[9,3] <- 14
level[10,3] <- 0

level[1,4] <- 153
level[2,4] <- 204
level[3,4] <- 153
level[4,4] <- 107
level[5,4] <- 102
level[6,4] <- 33
level[7,4] <- 59
level[8,4] <- 63

level[9,4] <- 14

level[10,4] <- 51

Le 17 mai 2011 à 15:17, Duncan Murdoch a écrit :

> On 17/05/2011 8:24 AM, Pierre Bruyer wrote:

>> Thank you for your answer, but the function spline() (and a lot of other function in R) can't take in its parameters the original contour which are define by a vector, i.e. :
>>
> 
> If you post some reproducible code to generate the contours, someone will show you how to use splines to interpolate them.
> 
> Duncan Murdoch
> 

>> ##creation of breaks for colors
>> i<-1
>> paliers<- c(-1.0E300)
>> while(i<=length(level[,1]))
>> {
>> paliers<- c(paliers,level[i,1])
>> i<- i+1
>> }
>> paliers<- c(paliers, 1.0E300)
>>
>>
>>
>> Le 17 mai 2011 à 13:05, Duncan Murdoch a écrit :
>>
>> > On 11-05-17 5:58 AM, Pierre Bruyer wrote:
>> >> I'm a French developer (so I am sorry if my english is not perfect). I have a problem to smooth the contours of a map. I have a dataset with 3 columns, x, y and z, where x and y are the coordinates of my points and z is evaluate to a qualitative elevation and his representation is a set of colors, which is define by levels.
>> >>
>> >> The problem is the curve of my contour is so linear, and I would like a more continuous contour. I use the function fitted.contour to draw my map.
>> >
>> > If you use a finer grid of x,y values you'll get shorter segments and they will look smoother.
>> >
>> > You might be able to use a smooth interpolator (e.g. spline()) rather than linear interpolation, but those occasionally do strange things e.g.
>> >
>> > x<- c(1:4, 5.9, 6:10)
>> > y<- c(1:4, 7, 6:10)
>> > plot(spline(x,y, n=200), type="l")
>> > points(x,y)
>> >
>> > where one point is out of line with the others, but the curve overcompensates in order to stay smooth.
>> >
>> > Duncan Murdoch
>>
>

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. Received on Tue 17 May 2011 - 15:09:18 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 17 May 2011 - 15:10:07 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive