Skip to content

convert x,y,z data into a grid

3 messages · Meesters, Erik, ONKELINX, Thierry, Marcelino de la Cruz

#
Michal,
thanks for the suggestions. If I try the wireframe I get a warning
message

"Warning message:
In nx * ny : NAs produced by integer overflow"

I haven't been able to figure out why that is, but could have something
to do with the 2.5mil * 2.5mil number of rows....

My data are not in a grid format, so the second option will not work. 
The data are simply UTM positions and depth values from a cruise
covering approximately an area of 10 square kilometers. In Grass there
is a function that reads in the dataframe and converts the data to a
grid which I think is easier to work with in many of the different
plotting routines.

Hope anyone can help.
Erik



-----Original Message-----
From: Michal Gallay [mailto:mgallay01 at qub.ac.uk] 
Sent: Wednesday, May 07, 2008 11:48
To: Meesters, Erik
Subject: Re: [R-sig-Geo] convert x,y,z data into a grid
On May 7 2008, Meesters, Erik wrote:

            
(vs.
Hello Erik,

you could try something like the following code with lattice package.
You don't need to convert the dat to grid for this.

require(lattice)

mydata <- read.table(...)

wireframe(z ~ x * y, data = mydata,
          scales = list(arrows = FALSE),
          drape = TRUE, colorkey = TRUE,
          screen = list(z = 30, x = -60))

or with simple graphics function 'persp' but for this you need to
convert the data to matrix/grid. The following code presumes your x,y,z
coordinates are on a grid. It will not work if they are not or at least
I am not aware of any other approach.

require(sp)

coordinates(mydata) <- ~ x+y
gridded(mydata) <- TRUE
m <- as.matrix(mydata)
exag <- 3
spacing <- 5
theta_val <- 120
phi_val <- 35
ltheta_val <- 20
lphi_val <- 10
z <- exag * m      # Exaggerate the relief
x <- spacing * (1:dim(m)[1])
y <- spacing * (1:dim(m)[2])

par(c(0.5,0.5,0.5,0.5))
persp(x, y, z, theta = theta_val, phi = phi_val, col = "gray", scale =
FALSE, ltheta = ltheta_val, lphi=lphi_val, shade = 0.75, border = NA,
box = TRUE, r=600)

Both of them worked for my 2mil points data.

I hope this helps.

Michal
--
Michal Gallay

Postgraduate Research Student
School of Geography, Archaeology and Palaeoecology Queen's University
Belfast BT7 1NN Northern Ireland

Tel: +44(0)2890 273929
Fax: +44(0)2890 973212
email: mgallay01 at qub.ac.uk
www: www.qub.ac.uk/geog
#
Dear Erik,

In my opinion you beter first create an interpolated grid (e.g. with
kriging). Then plot this interpolated grid. That will reduce the number
of points dramatically. A 100 by 100 grid will probably do.

HTH,

Thierry


------------------------------------------------------------------------
----
ir. Thierry Onkelinx
Instituut voor natuur- en bosonderzoek / Research Institute for Nature
and Forest
Cel biometrie, methodologie en kwaliteitszorg / Section biometrics,
methodology and quality assurance
Gaverstraat 4
9500 Geraardsbergen
Belgium 
tel. + 32 54/436 185
Thierry.Onkelinx at inbo.be 
www.inbo.be 

To call in the statistician after the experiment is done may be no more
than asking him to perform a post-mortem examination: he may be able to
say what the experiment died of.
~ Sir Ronald Aylmer Fisher

The plural of anecdote is not data.
~ Roger Brinner

The combination of some data and an aching desire for an answer does not
ensure that a reasonable answer can be extracted from a given body of
data.
~ John Tukey

-----Oorspronkelijk bericht-----
Van: r-sig-geo-bounces at stat.math.ethz.ch
[mailto:r-sig-geo-bounces at stat.math.ethz.ch] Namens Meesters, Erik
Verzonden: woensdag 7 mei 2008 14:23
Aan: r-sig-geo at stat.math.ethz.ch
Onderwerp: Re: [R-sig-Geo] convert x,y,z data into a grid

Michal,
thanks for the suggestions. If I try the wireframe I get a warning
message

"Warning message:
In nx * ny : NAs produced by integer overflow"

I haven't been able to figure out why that is, but could have something
to do with the 2.5mil * 2.5mil number of rows....

My data are not in a grid format, so the second option will not work. 
The data are simply UTM positions and depth values from a cruise
covering approximately an area of 10 square kilometers. In Grass there
is a function that reads in the dataframe and converts the data to a
grid which I think is easier to work with in many of the different
plotting routines.

Hope anyone can help.
Erik



-----Original Message-----
From: Michal Gallay [mailto:mgallay01 at qub.ac.uk] 
Sent: Wednesday, May 07, 2008 11:48
To: Meesters, Erik
Subject: Re: [R-sig-Geo] convert x,y,z data into a grid
On May 7 2008, Meesters, Erik wrote:

            
(vs.
Hello Erik,

you could try something like the following code with lattice package.
You don't need to convert the dat to grid for this.

require(lattice)

mydata <- read.table(...)

wireframe(z ~ x * y, data = mydata,
          scales = list(arrows = FALSE),
          drape = TRUE, colorkey = TRUE,
          screen = list(z = 30, x = -60))

or with simple graphics function 'persp' but for this you need to
convert the data to matrix/grid. The following code presumes your x,y,z
coordinates are on a grid. It will not work if they are not or at least
I am not aware of any other approach.

require(sp)

coordinates(mydata) <- ~ x+y
gridded(mydata) <- TRUE
m <- as.matrix(mydata)
exag <- 3
spacing <- 5
theta_val <- 120
phi_val <- 35
ltheta_val <- 20
lphi_val <- 10
z <- exag * m      # Exaggerate the relief
x <- spacing * (1:dim(m)[1])
y <- spacing * (1:dim(m)[2])

par(c(0.5,0.5,0.5,0.5))
persp(x, y, z, theta = theta_val, phi = phi_val, col = "gray", scale =
FALSE, ltheta = ltheta_val, lphi=lphi_val, shade = 0.75, border = NA,
box = TRUE, r=600)

Both of them worked for my 2mil points data.

I hope this helps.

Michal
--
Michal Gallay

Postgraduate Research Student
School of Geography, Archaeology and Palaeoecology Queen's University
Belfast BT7 1NN Northern Ireland

Tel: +44(0)2890 273929
Fax: +44(0)2890 973212
email: mgallay01 at qub.ac.uk
www: www.qub.ac.uk/geog

_______________________________________________
R-sig-Geo mailing list
R-sig-Geo at stat.math.ethz.ch
https://stat.ethz.ch/mailman/listinfo/r-sig-geo
#
This would be my way, with kernel smoothing from spatstat function smooth.ppp:

Let's say that "cosa" is a dataframe with three columns x, y and z .

library(rgl)

library(ecespa) # for function "haz.ppp"; it requires (and load)  spatstat

cosa.ppp <- haz.ppp (cosa) # makes ppp object 
"easily". You may consider also functions "ppp" or "as.ppp" in spatstat.

cosa.s <- smooth.ppp (cosa.ppp)  #  spatial 
smoothing of numeric values observed

cosa.p <- persp.im (cosa.s) # 3D transformation 
matrix returned by persp.default

persp3d(cosa.p) # your perspective plot


Regards, Marcelino
At 14:33 07/05/2008, ONKELINX, Thierry wrote:
________________________________

Marcelino de la Cruz Rot

Departamento de  Biolog?a Vegetal
E.U.T.I. Agr?cola
Universidad Polit?cnica de Madrid
28040-Madrid
Tel.: 91 336 54 35
Fax: 91 336 56 56
marcelino.delacruz at upm.es