[R] Lattice: How to color the data points in splom() according to the panel they are plotted?

Peter Ehlers ehlers at ucalgary.ca
Sun Jan 17 17:03:59 CET 2010


Deepayan Sarkar wrote:
> On Sat, Jan 16, 2010 at 11:56 PM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
>> Marius Hofert wrote:
>>> Dear ExpeRts,
>>>
>>> I have the scatter plot matrix as given below. I would like the different
>>> "sub-plots" in the scatter plot matrix to be colored differently. How do I
>>> get all points shown in the upper-left plot (on position (1,1) in the
>>> scatter plot matrix) to be plotted in blue, and the points shown in the plot
>>> to the right (on position (1,2) in the scatter plot matrix) to be plotted in
>>> red? More generally, how can I provide a matrix of colors to be used by
>>> splom() such that all data points in the corresponding sub-plot of the
>>> scatter plot matrix are shown in the specified color?
>>>
>>> Cheers,
>>>
>>> Marius
>>>
>>> Here is the code:
>>>
>>> library(lattice)
>>>
>>> entrymat=matrix(0,nrow=3,ncol=3)
>>> entrymat[1,2]="black"
>>> entrymat[1,3]="blue"
>>> entrymat[2,3]="red"
>>> entrymat=t(entrymat)
>>>
>>> splom(~iris[,1:3],superpanel=function(z,...){
>>>
>>>  mymat.df=data.frame(rows=as.vector(row(entrymat)),cols=as.vector(col(entrymat)),entries=as.vector(entrymat))
>>>        mymat.df=subset(mymat.df,cols<rows)
>>>                with(mymat.df,{
>>>                        panel.text(x=rows,y=cols,labels=entries)
>>>                })
>>>
>>>  panel.pairs(z,upper.panel=panel.splom,lower.panel=function(...){},...)
>>>        },varnames=c("1","2","3")
>>> )
>> I think that you will have to modify panel.pairs to get what
>> you want. But I must admit that I can't see why you would
>> want such a plot. What's achieved by having different
>> colours in different subpanels? And you would lose the
>> ability to colour groups differently (or things would become
>> really complicated and messy).
> 
> Thanks, I was going to say the same thing, except that it would be
> conceptually simpler just to add the 'i' and 'j' values as arguments
> to the "panel" function (the 'pargs' variable). The colors could then
> be passed through as part of the ... arguments, and the relevant entry
> extracted in the panel function.
> 
> The other option is to keep a global counter and increment it inside
> the panel function, and choosing colors based on that counter and
> knowledge of the order in which panels are drawn. Not very elegant,
> but the least intrusive solution I can think of.
> 
Now why didn't I think of that? The global counter seems to
me the way to go. But, of course, I still see very little
need for this option.

  -Peter



More information about the R-help mailing list