From: Marius Hofert <m_hofert_at_web.de>

Date: Wed, 20 Apr 2011 11:17:51 +0200

*>> 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)
*

*>>
*

*>>
*

>> On 2011-04-20, at 01:33 , baptiste auguie wrote:

*>>
*

*>>
*

*>>
*

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. Received on Wed 20 Apr 2011 - 09:20:10 GMT

Date: Wed, 20 Apr 2011 11:17:51 +0200

Dear Baptiste,

many thanks, that worked :-)

For the alignment, I made a new minimal example and posted it under the subject "grid.table + splom: how to nicely align panel entries".

Cheers,

Marius

On 2011-04-20, at 10:22 , baptiste auguie wrote:

> On 20 April 2011 19:23, Marius Hofert <m_hofert_at_web.de> wrote:

>> thank you for your help. I tried to built in your suggestions into the splom.

> > 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_hofert_at_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_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. Received on Wed 20 Apr 2011 - 09:20:10 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Wed 20 Apr 2011 - 09:50:31 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*