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