Hi List,
I am trying to plot a grid with an overlayed height. I have a dataframe
with four variables:
x,y,gridvalue,height. The dataframe has 2.5mio observations (ie grid
points),
I assign colors through the gridvalue using map_color_gradient thus
producing:
x,y,gridvalue,height,gridcol as variables of the dataframe. The grid
dimensions are 1253 x 2001 (=2507253 data points).
My attempts with surface3d fail, mainly because I cannot produce the
matrix required for the height input.
elev.to.list{CTFS} fails with: "Error in matrix(elevfile$elev, nrow=
1+ydim/gridsize, ncol=1+xdim/gridsize. : attempt to set an attribute on
NULL" which I assume means it requires a square grid (=quadrates).
Any ideas/help appreciated
Thanks
Herry
Dr Alexander Herr
Spatial and statistical analyst
CSIRO, Sustainable Ecosystems
Davies Laboratory,
University Drive, Douglas, QLD 4814
Private Mail Bag, Aitkenvale, QLD 4814
Phone/www
(07) 4753 8510; 4753 8650(fax)
Home: http://herry.ausbats.org.au
Webadmin ABS: http://ausbats.org.au
Sustainable Ecosystems: http://www.cse.csiro.au/
surface3d grid from xyz dataframe
2 messages · Alexander.Herr at csiro.au, Duncan Murdoch
On 12/17/2006 7:56 PM, Alexander.Herr at csiro.au wrote:
Hi List,
I am trying to plot a grid with an overlayed height. I have a dataframe
with four variables:
x,y,gridvalue,height. The dataframe has 2.5mio observations (ie grid
points),
I assign colors through the gridvalue using map_color_gradient thus
producing:
x,y,gridvalue,height,gridcol as variables of the dataframe. The grid
dimensions are 1253 x 2001 (=2507253 data points).
My attempts with surface3d fail, mainly because I cannot produce the
matrix required for the height input.
elev.to.list{CTFS} fails with: "Error in matrix(elevfile$elev, nrow=
1+ydim/gridsize, ncol=1+xdim/gridsize. : attempt to set an attribute on
NULL" which I assume means it requires a square grid (=quadrates).
When you are asking a question about a function from a contributed package, please state which package you found it in. There's a surface3d function in the rgl package; is that the one you're using? It takes input in the same format as contour() uses. That is: the x values should be a vector of values corresponding to the rows of a matrix, the y values correspond to the columns, the z values are in a matrix. Since your data is in a dataframe, it's not the right shape. How to get it into the right shape depends a lot on what the pattern of your data really is. Do you have a relatively small number of x and y values, corresponding to rows and columns, or are they scattered over the region? If the former, I'd convert them to integer values marking the positions, then use those to index into a matrix to place the z values there. e.g. with data like this: x y z 1 1 1 1 2 2 2 1 3 2 2 4 the x and y values are already integer valued, so you could use x <- sort(unique(data$x)) y <- sort(unique(data$y)) z <- matrix(NA, length(x), length(y)) z[cbind(data$x, data$y)] <- data$z Duncan Murdoch