Re: [R] splom, plotmath: how to add three lines of information with alignment?

From: Marius Hofert <m_hofert_at_web.de>
Date: Wed, 20 Apr 2011 00:17:31 +0200

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)

On 2011-04-19, at 23:04 , baptiste auguie wrote:

> Hi,
> 
> This is always a challenge with expressions vs calls, etc. grid.table
> expects an input that can be coerced into a matrix of unevaluated
> expressions. This seems to work,
> 
> info <- function(a,b){
>  grid.table(c(bquote(alpha==.(a)), bquote(beta==.(b))),
>             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
>             )
> }
> xyplot(1~1, panel=function(...) info(0.1, 0.5) )
> 
> 
> HTH,
> 
> baptiste
> 
> 
> On 20 April 2011 07:52, Marius Hofert <m_hofert_at_web.de> wrote:
>> Dear guys,
>> 
>> I'm almost there... how can I fix the final problems?
>> 
>> Cheers,
>> 
>> Marius
>> 
>> PS: the "info" function is the one I will then try to call within splom...
>> 
>> library(lattice)
>> library(gridExtra)
>> 
>> ## trial 1
>> info <- function(a,b){
>>    grid.table(as.expression(substitute(expression(alpha==alph, beta==bet),
>>        list(alph=a, bet=b))),
>>               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
>>               )
>> }
>> xyplot(1~1, panel=function(...) info(0.1, 0.5) )
>> 
>> ## trial 2
>> info <- function(a,b){
>>    grid.table(substitute(expression(alpha==alph, beta==bet),
>>        list(alph=a, bet=b)),
>>               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
>>               )
>> }
>> xyplot(1~1, panel=function(...) info(0.1, 0.5) )
>> 
>> 
>> 
>> On 2011-04-19, at 21:39 , David Winsemius wrote:
>> 
>>> 
>>> On Apr 19, 2011, at 3:26 PM, baptiste auguie wrote:
>>> 
>>>> I'm hoping to release a new version on CRAN soon; the broken state of
>>>> R-forge and my poor understanding of R CMD CHECK results have often
>>>> made me postpone action indefinitely.
>>> 
>>> In this case the errors were all mine. I suppose an even earlier stage newbie than I might have problems not knowing that binary packages were not available on r-forge or in recognizing (eventually) that loaded old packages might prevent new versions from loading. Figuring out how to clear one package from all the various places they can reside is beyond my pay grade, so I just restart. Someone should write a flush.package function :-)
>>> 
>>> --
>>> david.
>>> 
>>>> 
>>>> Best,
>>>> 
>>>> baptiste
>>>> 
>>>> On 19 April 2011 22:32, David Winsemius <dwinsemius_at_comcast.net> wrote:
>>>>> I attempted , mostly with success to install following the directions in
>>>>> r-forge webpage.
>>>>> 
>>>>> I did add type="source", since generally r-forge does not have compiled
>>>>> binaries and I did need to do it twice since I did not have `brew` installed
>>>>> under 2.13.0(beta). The loading of help seemed to be a problem which I
>>>>> initially assumed to be due to my being on a Mac running R 2.13.0(beta).
>>>>> When issuing ?gridExtra I get a help page that says: Error in fetch(key) :
>>>>> internal error -3 in R_decompress1
>>>>> 
>>>>> (I did not expect to ?gridExtra to work since I generally use
>>>>> help(package=gridExtra) for packages, but when i do that I get:
>>>>>> help(package=gridExtra)
>>>>> Error in formatDL(nm, txt, indent = max(nchar(nm, "w")) + 3) :
>>>>> incorrect values of 'indent' and 'width'
>>>>> 
>>>>> Then I realized I was loading a new package on top of an old loaded package
>>>>> so I restarted R and none of the help errors returned.
>>>>> 
>>>>> Nice text table. Should make this task a lot easier that the strategy I was
>>>>> about to suggest of doing some sort of superpose of multiple panel.text
>>>>> calls.
>>>>> 
>>>>> --
>>>>> David
>>>>> 
>>>>> 
>>>>> On Apr 19, 2011, at 1:19 AM, baptiste auguie wrote:
>>>>> 
>>>>>> On 19 April 2011 17:06, Marius Hofert <m_hofert_at_web.de> wrote:
>>>>>>> 
>>>>>>> Dear Baptiste,
>>>>>>> 
>>>>>>> thanks for your answer.
>>>>>>> Unfortunately, I get the error "Error using packet 1 invalid 'times'
>>>>>>> argument" when executing your code. Hmm... not sure where the problem is.
>>>>>>> 
>>>>>> 
>>>>>> Oops,  sorry, my mistake. For this code to work you'll need a more
>>>>>> recent version of gridExtra than the one on CRAN. You can get it here:
>>>>>> http://code.google.com/p/gridextra/
>>>>>> 
>>>>>> baptiste
>>>>>> 
>>>>>>> Cheers,
>>>>>>> 
>>>>>>> Marius
>>>>>>> 
>>>>>>> On 2011-04-19, at 24:03 , baptiste auguie wrote:
>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> Does this help?
>>>>>>>> 
>>>>>>>> library(gridExtra)
>>>>>>>> 
>>>>>>>> my.title = function(expressions) {
>>>>>>>> grid.table(expressions, parse=TRUE,
>>>>>>>>           theme=theme.list(gpar.corefill = gpar(fill = NA, col = NA),
>>>>>>>>             core.just = "left"))
>>>>>>>> }
>>>>>>>> 
>>>>>>>> e = expression(alpha,"text", italic(italic),
>>>>>>>>  hat(beta), integral(f(x)*dx, a, b))
>>>>>>>> 
>>>>>>>> library(lattice)
>>>>>>>> 
>>>>>>>> xyplot(1~1, panel=function(...) my.title(e) )
>>>>>>>> 
>>>>>>>> HTH,
>>>>>>>> 
>>>>>>>> baptiste
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On 19 April 2011 08:43, Marius Hofert <m_hofert_at_web.de> wrote:
>>>>>>>>> 
>>>>>>>>> Dear expeRts,
>>>>>>>>> 
>>>>>>>>> I would like to create a scatter plot matrix with splom(). The lower
>>>>>>>>> panel should
>>>>>>>>> contain some additional information about the samples shown in the
>>>>>>>>> upper panel
>>>>>>>>> plot, see the splom() call below. Now two questions came up:
>>>>>>>>> (1) The lower panels show "tau" and "alpha" on top of each other. How
>>>>>>>>> can I plot
>>>>>>>>> *three* expressions on top of each other? I tried several approaches
>>>>>>>>> (see the trials below),
>>>>>>>>> but couldn't manage to get this to work properly.
>>>>>>>>> (2) Is there the possibility to plot the two/three lines (containing
>>>>>>>>> "tau = ..", "alpha = ..")
>>>>>>>>> aligend according to the equality sign?
>>>>>>>>> 
>>>>>>>>> Cheers,
>>>>>>>>> 
>>>>>>>>> Marius
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> library(lattice)
>>>>>>>>> 
>>>>>>>>> f <- function(i,j) i+j
>>>>>>>>> 
>>>>>>>>> U <- matrix(runif(3000), ncol=3)
>>>>>>>>> 
>>>>>>>>> splom(U,
>>>>>>>>>    superpanel=function(z, ...){
>>>>>>>>>        tau <- cor(U, method="kendall")
>>>>>>>>>        df=data.frame(rows=as.vector(row(tau)),
>>>>>>>>> columns=as.vector(col(tau)),
>>>>>>>>>        vals=as.vector(tau)) # data frame of row indices, column
>>>>>>>>> indices, and tau values
>>>>>>>>>        df=subset(df,columns<rows) # subset for lower left triangle
>>>>>>>>>        with(df,{
>>>>>>>>>            panel.text(x=rows, y=columns,
>>>>>>>>> 
>>>>>>>>> labels=as.expression(unlist(lapply(1:length(vals),
>>>>>>>>>                           function(i)
>>>>>>>>> substitute(atop(tau==tau.,alpha==alpha.),
>>>>>>>>>                                                  list(tau.=vals[i],
>>>>>>>>> alpha.=round(vals[i],3)) ) ))) )
>>>>>>>>>        })
>>>>>>>>>        panel.pairs(z, upper.panel=panel.splom,
>>>>>>>>> lower.panel=function(...){}, ...)
>>>>>>>>>    })
>>>>>>>>> 
>>>>>>>>> ## some minimal "trial" examples:
>>>>>>>>> plot(0,0,main=paste("alpha=1","\n","beta=2","\n","gamma=3",sep=""))
>>>>>>>>> plot(0,0,main=expression(atop(atop(alpha==1, beta==2), gamma==3)))
>>>>>>>>> plot(0,0,main=paste(expression(alpha==1),"\n",expression(beta==2),"\n",
>>>>>>>>>       expression(gamma==3), sep=""))
>>>>>>>>> plot(0,0,main=substitute(paste(alpha==1,x,beta==2,x,
>>>>>>>>>       gamma==3, sep=""), list(x="\n")))
>>>>>>>>> plot(0,0,main=expression(cat(alpha==1, "\n", beta==2, "\n", gamma==3,
>>>>>>>>> sep="")))
>>>>>>>>> plot(0,0,main=cat(expression(alpha==1), "\n", expression(beta==2),
>>>>>>>>> "\n",
>>>>>>>>>       expression(gamma==3), sep=""))
>>>>>>>>> 
>>>>>>>>> ______________________________________________
>>>>>>>>> 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.
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>> 
>>>>>> ______________________________________________
>>>>>> 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
>>>>> West Hartford, CT
>>>>> 
>>>>> 
>>> 
>>> David Winsemius, MD
>>> West Hartford, CT
>>> 
>> 
>> 

______________________________________________
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 Tue 19 Apr 2011 - 22:27:25 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 - 00:10:32 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.

list of date sections of archive