Skip to content

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

4 messages · Marius Hofert, Deepayan Sarkar, Peter Ehlers

#
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")
)
1 day later
#
Marius Hofert wrote:
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).

Attached is a modified panel.pairs function (but don't let
Deepayan see it; he'll probably be horrified by the
kludginess). Source the file and then try:

splom(~iris[1:3], superpanel = mypanel.pairs,
   clrmat = matrix(1:9,3,3))
splom(~iris[1:3], superpanel = mypanel.pairs,
   clrmat = matrix(c(NA,1,1,2,NA,4,2,6,NA),3,3))
theclrs <- matrix(c(NA,1,1,1,2,NA,3,3,2,4,NA,4,2,5,5,NA),4,4)
splom(~iris[1:4], superpanel = mypanel.pairs,
   clrmat = theclrs)

  -Peter Ehlers

  
    
#
On Sat, Jan 16, 2010 at 11:56 PM, Peter Ehlers <ehlers at ucalgary.ca> wrote:
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.

-Deepayan
#
Deepayan Sarkar wrote:
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