[R] Plotting rows (or columns) from a matrix in different graphs, not using "par"

Marc Schwartz MSchwartz at mn.rr.com
Tue Jun 14 21:53:05 CEST 2005


On Tue, 2005-06-14 at 20:00 +0200, Camarda, Carlo Giovanni wrote:
> Dear R-users,
> I would like to ask whether it's possible (for sure it would be), to
> plot each rows (or columns) in different graphs and in the same figure
> region without using the function "par" and then struggling around with
> "axes" and labels etc.
> Luckily, I would always have "rows + columns = even number" and the same
> "ylim".
> 
> The next one could be a sort of example on what I would like to avoid
> plotting the rows of the matrix "mat":
> 
> ########### EXAMPLE ######################
> dat <- sort(runif(16, 1, 1000))
> mat <- matrix(dat, ncol=4, byrow = T)
> y   <- seq(1950, 1953)
> par(mfrow=c(2,2))
> plot(y, mat[1,], ylim=c(1,1000), axes=F, xlab="", ylab="simul.")
> box()    
> axis(side=2, tick=T, labels=T)
> axis(side=3, tick=T, labels=T)
> plot(y, mat[2,], ylim=c(1,1000), axes=F, xlab="", ylab="")
> box()
> axis(side=3, tick=T, labels=T)
> plot(y, mat[3,], ylim=c(1,1000), axes=F, xlab="years", ylab="simul.")
> box()
> axis(side=1, tick=T, labels=T)
> axis(side=2, tick=T, labels=T)
> plot(y, mat[4,], ylim=c(1,1000), axes=F, xlab="years", ylab="")
> box()
> axis(side=1, tick=T, labels=T)
> ########### END EXAMPLE ########################
> 
> Naturally something more compact would be even nicer.
> 
> Thanks in advance,
> Carlo Giovanni Camarda

If I am understanding what you are trying to do, then using xyplot()
from the lattice package (part of the standard R installation) may be
best:

Modify 'mat' so that all data is in 'df':

> df <- data.frame("Simul" = as.vector(mat), 
                   "Years" = rep(1950:1953, 4),
                   "Group" = rep(LETTERS[1:4], each = 4))

> df
       Simul Years Group
1   88.67956  1950     A
2  364.73579  1951     A
3  546.63525  1952     A
4  774.05869  1953     A
5  138.09586  1950     B
6  382.20986  1951     B
7  592.85512  1952     B
8  810.45569  1953     B
9  232.43912  1950     C
10 524.91085  1951     C
11 598.49688  1952     C
12 963.97328  1953     C
13 261.80598  1950     D
14 533.91143  1951     D
15 765.72522  1952     D
16 996.72192  1953     D


# Load the lattice package

> library(lattice)

# Draw the plot, note the use of standard R formulae in the syntax
# with the addition of the grouping vector after the '|'

> xyplot(Simul ~ Years | Group, data = df)

See:

library(lattice)
?xyplot

for more information.

HTH,

Marc Schwartz




More information about the R-help mailing list