The result is good, thanks a lot, but how can I with this method fill my raster 
to color?

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

> I don't think filled.contour gives you access to the contour lines.  If you 
> use contourLines() to compute them, then you can draw them using code like 
> this:
> 
> contours <- contourLines(V2b,levels=paliers)
> for (i in seq_along(contours)) {
>  x <- contours[[i]]$x
>  y <- contours[[i]]$y
>  lines( splines( seq_along(x), x)$y, splines( seq_along(y), y)$y )
> }
> 
> but as I said, you won't get great results.  A better way is to use a finer 
> grid, e.g. by fitting a smooth surface to your set of points and using 
> predictions from the model to interpolate.
> 
> Duncan Murdoch
> 
> 
> On 17/05/2011 9:35 AM, Pierre Bruyer wrote:
>> 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@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.

Reply via email to