[R] Contour plots of four two-dimensional matrices

David Winsemius dwinsemius at comcast.net
Sun Mar 15 20:08:44 CET 2009

You would use layout to set up the page in base graphics. It sets up  
the page to receive multiple plots. Unfortunately, this will *not*  
give you side by side plots because filled.contour is restricted to a  
full page per its help page

layout(matrix(c(1,2,3,4), 2,2 byrow=TRUE)
for (i in 1:4) {
filled.contour(seven[ , , i] }

Lattice graphics looks to be your only option:

levelplot( in package lattice) has methods for arrays. This is what  
its help page says:
"Both levelplot and wireframe have methods for matrix, array, and  
table objects, in which case x provides the z vector described above,  
while its rows and columns are interpreted as the x and y vectors  
respectively. This is similar to the form used in filled.contour and  
image. For higher-dimensional arrays and tables, further dimensions  
are used as conditioning variables. "

Note that the matrix type is limited to 2 dimensions and you would  
need to use an "array" rather than a matrix. I just tested contourplot  
with the "three" example below and got encouraging results as well, so  
I think you are in luck. I would try simply this:

contourplot(seven)   # can it really be this simple ?!?!

So your your data arrangement is in accord with that description. The  
desired 2 x 2 plot might happen automagically with your third  
dimension of the array = 4. The other more typical way to do it would  
be with a dataframe object that had x,y,z and grouping variables and  
to specify a formula like z ~ x + y | group. There is an example in  
the help page.

To that form with as.data.frame.table. Run this demo:

three <- array(1:27, c(3,3,3))
three.long <- as.data.frame.table(three)  # would need to relabel  
variable names
names(three.long) <- c("row", "col", instance", "Z")

David Winsemius

On Mar 15, 2009, at 2:15 PM, Thomas Levine wrote:

> I want to plot them side by side.
> On Sun, Mar 15, 2009 at 12:41 PM, David Winsemius <dwinsemius at comcast.net 
> > wrote:
> What is it that you want to do with these 4 plots? Overlay them with  
> different color contours or plot them side-by-side on the same page?
> ?par  # for filled.contour but the implementation will be different  
> for those two options.
>  contourplot is is a lattice plotting function. See Figure 6.10 on  
> Sarkar's Lattice book pages. levelplot is the closest analog to  
> filled contour in lattice.
> -- 
> David Winsemius
> On Mar 15, 2009, at 12:22 PM, Thomas Levine wrote:
> I have four large two-dimensional matrices of which I want to create  
> contour
> plots. Something like
> filled.contour(<matrix>)
> contourplot(<matrix>)
> works but only gives me one plot at a time. If I combine the four  
> matrices
> into one three-dimensional matrix, which I'll name "seven", there  
> should be
> a way of doing something like this
> contourplot(seven[,,k] for k in 1 to 4)
> such that they come out as one plot rather than four. I couldn't  
> figure out
> how to do this, so I tried a disgusting alternative that involved  
> generating
> x,y and k vectors, but I'd rather do it properly.
> Tom
>        [[alternative HTML version deleted]]
> ______________________________________________
> R-help at 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.
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT

David Winsemius, MD
Heritage Laboratories
West Hartford, CT

More information about the R-help mailing list