On 20 April 2011 19:23, Marius Hofert <m_hof...@web.de> wrote: > Dear Baptiste, > > thank you for your help. I tried to built in your suggestions into the splom. > Below is the result. I decided to create the plotmath-expressions outside the > function splom2, this will allow me later to horizontally shift (via phantom, > for example) the table entries so that they will be vertically aligned > according > to the "=" signs. Although an array is allowed to contain expressions, I could > not manage to create it properly. Do you know a solution? > > Cheers, > > Marius > > library(lattice) > library(grid) > library(gridExtra) > > ## splom with customized lower.panel > ## x: data > ## expr.arr: array of expressions [(i,j,) entry contains expressions which are > ## plotted in a grid table in the lower panel (i,j)] > splom2 <- function(x, expr.arr){ > ## function for creating table > table.fun <- function(vec){ # single values for one panel > grid.table(vec, > parse=TRUE, # parse labels as expressions > theme=theme.list( > gpar.corefill=gpar(fill=NA, col=NA), # make bg transparent > core.just="left") # justification of labels > ) > } > ## splom > splom(x, varname.cex=1.4, > superpanel=function(z, ...){ > panel.pairs(z, upper.panel=panel.splom, > lower.panel=function(i,j){ > table.fun(expr.arr[i,j,]) > }, ...) > }) > } > > ## create data and array of expressions > d <- 4 > x <- matrix(runif(d*1000), ncol=d) > expr.arr <- array(, dim=c(d,d,3), dimnames=c("i","j","val")) # d x d x 3 > elements > for(i in 1:d){ > for(j in 1:d){ > # expr.arr[i,j,] <- expression(italic(a)==0, italic(bbb)==0, > italic(c)==0) # does no work > expr.arr[i,j,] <- c(bquote(italic(a)==.(0)), > bquote(italic(bbb)==.(0)), bquote(italic(c)==.(0))) # same here > } > } > > ## plot > splom2(x, expr.arr) >
Initializing your array with a list seems to work for whatever reason that's well above my head, expr.arr <- array(list(NA,NA,NA), dim=c(d,d,3), dimnames=c("i","j","val")) As for the alignment, there should be a better way using multiple columns in grid.table, but parse is struggling to interpret the = sign on its own. Again, I'm not sure why, this is deep magic to me. library(gridExtra) d = matrix(c("italic(a)==phantom('')", round(pi,4), "italic(b)==phantom()", round(pi,6)), ncol=2, byrow=T) grid.table(d, parse=T,theme=theme.list( gpar.corefill=gpar(fill=NA, col=NA), core.just="left", padding.h = unit(0, "mm") )) HTH, baptiste > > On 2011-04-20, at 01:33 , baptiste auguie wrote: > >> Hi, >> >> You may want to wait advice from someone who actually understands (the >> labyrinth that is) lattice's help for splom, but the following might >> be a start. I didn't understand what values you actually wanted >> displayed in the lower triangle panels, so I made up some random ones >> in a 3x3 matrix of 3-vectors. >> >> library(lattice) >> library(gridExtra) >> >> info <- function(x){ >> grid.table(c(bquote(italic(a)==.(x[1])), >> bquote(italic(b)==.(x[2])), >> bquote(italic(c)==.(x[3]))), >> core.just="left", >> parse=TRUE) >> } >> >> U <- matrix(runif(3000), ncol=3) >> >> splom(U, >> superpanel=function(z, ...){ >> ## dummy 3x3 matrix of 3 values to diplay >> values <- replicate(9, round(rnorm(3), 3), simplify=FALSE) >> dummy <- matrix(values, ncol=3, byrow=F) >> panel.pairs(z, upper.panel=panel.splom, >> lower.panel=function(i, j, ...){ >> print(paste(i,j)) # current panel indices >> info(dummy[i,j] [[1]]) # access the list elements >> }, ...) >> }) >> >> HTH, >> >> baptiste >> >> >> On 20 April 2011 10:17, Marius Hofert <m_hof...@web.de> wrote: >>> Dear Baptiste, >>> >>> there is one tricky part left: how can I create a matrix with the >>> grid.table() >>> objects as output? Is this possible? If not, maybe one can try to work with >>> panel.splom (which can address single panels and thus call info() for each >>> row-column index pair (i,j)), but I'm not sure if this will work. >>> >>> Cheers, >>> >>> Marius >>> >>> library(lattice) >>> library(gridExtra) >>> >>> splom2 <- function(x, a, b, c){ >>> ## function for the additional information >>> info <- function(a., b., c.){ # single values for one panel >>> grid.table(c(bquote(italic(a)==.(a.)), >>> bquote(italic(b)==.(b.)), >>> bquote(italic(c)==.(c.)) >>> ), >>> parse=TRUE, # parse labels as expressions >>> theme=theme.list( >>> gpar.corefill=gpar(fill=NA, col=NA), # make bg transparent >>> core.just="right") # justification of labels >>> ) >>> } >>> labs <- matrix(, nrow=ncol(x), ncol=ncol(x)) # should be a matrix of >>> grid.table() objects >>> for(i in 1:ncol(x)) for(j in 1:ncol(x)) labs[i,j] <- info(a.=a[i,j], >>> b.=b[i,j], c.=c[i,j]) >>> ## splom >>> splom(x, superpanel=function(z,...){ >>> df=data.frame(rows=as.vector(row(a)), >>> columns=as.vector(col(a)), labs=as.vector(labs)) >>> df=subset(df,columns<rows) # subset for lower left triangle >>> with(df,{ >>> panel.text(x=rows, y=columns, labels=labs) >>> }) >>> panel.pairs(z, upper.panel=panel.splom, >>> lower.panel=function(...){}, ...) >>> }) >>> } >>> >>> ## generate data >>> U <- matrix(runif(3000), ncol=3) >>> >>> ## build information >>> a <- cor(U, method="kendall") >>> b <- diag(ncol=3, nrow=3) >>> c <- diag(ncol=3, nrow=3) >>> >>> ## plot with information >>> splom2(U, a, b, c) >>> >>> >>> > > ______________________________________________ R-help@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.