Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to create a 3d contour plot without continuous data in R?

I want to create a contour of variable z with the x,y,z data. However, it seems like we need to provide the data in increasing order.

I tried to use some code but it gave me the error.

I tried the following code: Trial 1:

age2100 <- read.table("temp.csv",header=TRUE,sep=",")

x <- age2100$x
y <- age2100$y
z <- age2100$z

contour(x,y,z,add=TRUE,col="black")

I got the following error

Error in contour.default(x, y, z, add = TRUE, col = "black") : increasing 'x' and 'y' values expected

I then tried to use ggplot2 to create the contour. I used the following code:

library("ggplot2")
library("MASS")
library("rgdal")
library("gpclib")
library("maptools")
age2100 <- read.table("temp.csv",header=TRUE,sep=",")
v <- ggplot(age2100, aes(age2100$x, age2100$y,z=age2100$z))+geom_contour()
v

I got the following error:

Warning message:

Not possible to generate contour data 

Please find the data on the following location https://www.dropbox.com/s/mg2bo4rcr6n3dks/temp.csv

Can anybody tell me how to create the contour data from the third variable (z) from the temp.csv ? I need to do these many times so I am trying to do on R instead of Arcgis.

like image 509
Jd Baba Avatar asked Jan 17 '13 08:01

Jd Baba


People also ask

How do you plot in 3D contour?

To plot 3D contour we will use countour3() to plot different types of 3D modules. Syntax: contour3(X,Y,Z): Specifies the x and y coordinates for the values in Z. contour3(Z): Creates a 3-D contour plot containing the isolines of matrix Z, where Z contains height values on the x-y plane.

How are contour plots made?

A contour plot is a graphical technique for representing a 3-dimensional surface by plotting constant z slices, called contours, on a 2-dimensional format. That is, given a value for z, lines are drawn for connecting the (x,y) coordinates where that z value occurs.


1 Answers

Here is an example of how one interpolates using interp from the akimapackage:

age2100 <- read.table("temp.csv",header=TRUE,sep=",")

x <- age2100$x
y <- age2100$y
z <- age2100$z

require(akima)

fld <- interp(x,y,z)

par(mar=c(5,5,1,1))
filled.contour(fld)

enter image description here

Here is an alternate plot using the imagefunction (this allows some flexibility to adding lower level plotting functions (requires the image.scale function, found here):

source("image.scale.R") # http://menugget.blogspot.de/2011/08/adding-scale-to-image-plot.html

x11(width=5, height=6)
layout(matrix(c(1,2), nrow=1, ncol=2), widths=c(4,1), height=6, respect=TRUE)
layout.show(2)

par(mar=c(4,4,1,1))
image(fld)
contour(fld, add=TRUE)
points(age2100$x,age2100$y, pch=".", cex=2)

par(mar=c(4,0,1,4))
image.scale(fld$z, xlab="", ylab="", xaxt="n", yaxt="n", horiz=FALSE)
box()
axis(4)
mtext("text", side=4, line=2.5)

enter image description here

like image 153
Marc in the box Avatar answered Sep 29 '22 09:09

Marc in the box