[R] using contour() with x,y,z data?

tyler tyler.smith at mail.mcgill.ca
Thu Jun 26 20:45:26 CEST 2008

"Bob and Deb" <bobdebm at gmail.com> writes:

> I'm new to R and I have a problem :-)  Below is what my data file that looks
> like.  I tried to import and contour this data by doing this:
>    cv_data <- read.table("cv_data.csv",sep=",",header=TRUE)
>    attach(cv_data)
>    contour(x,y,z)
> I get the error "Error in contour.default(x,y,z) : increasing 'x', and 'y'
> values expected"  I can see that y is not increasing, but I don't know how
> to get this to work.

All of your arguments to contour are wrong. x and y are the locations of
the gridlines for the figure (and are not required), and z is a matrix
of values, not a single vector. See ?contour for the details and

I'm sure there is a better way to do this, but when I have data in the
format you do:

x   y     z
10, 0.1,  3
10, 0.2,  7
10, 1.0,  5
20, 0.1, 12
20, 0.2,  4

I use the following function to convert it to the proper format:

image.maker <- function(coords, value){
  N <- length(unique(coords[,1]))
  image.out <- matrix(NA, nrow = N, ncol = N)
  coords[,1] <- as.numeric(factor(coords[,1]))
  coords[,2] <- as.numeric(factor(coords[,2]))
  for (i in 1:nrow(coords))
    image.out[coords[i,1], coords[i,2]] <- value[i]

my.image <- image.maker(cv_data[,c("x", "y")], cv_data$z)



Power corrupts. PowerPoint corrupts absolutely.
                                       --Edward Tufte


More information about the R-help mailing list