Superimpose pairs plot based on condition

1.6k views Asked by At

**Edit:**I am sorry, but the situation could be a little bit more complex than I have shown. However, both of your scripts work, although the first might be not so clear for large dataset due to point overlap! Thanks very much Sacha!

I would like to first show the pairs of several variables, and then superimpose the selected data of the same dataset. Usually, the superimpose can be achived using par(new=T) like this:

h<-rnorm(nc)  # this variable was used for conditioning
x<-rnorm(nc)
y<-rnorm(nc)
z<-rnorm(nc)
m<-cbind(x,y,z)
pairs(m)
par(new=T)
pairs(m[h>0.7,],col="red")

However, it seems that the par() setting does not work for such usage.

Then, probably lattice library could help, ex. splom(), but I do not know if it really works, and how. Could someone give some suggestions?

2

There are 2 answers

0
Sacha Epskamp On BEST ANSWER

I assume paris must be pairs? The pairs function doesn't have an add argument or so, it would probably also not be that trivial since the plot has 9 panels (simply doing points will plot in the last panel). but it is not that hard to do what you want in a single plot using col:

nc <- 100
set.seed(1)
x<-rnorm(nc)
y<-rnorm(nc)
z<-rnorm(nc)
m<-cbind(x,y,z)

cols <- ifelse(x>0.7,"red","black")
pairs(m,col=cols)

enter image description here

Edit:

Another thing you can do in pairs is actually set the function you want to do in each panel. By default this is points, but you can extend that to include some conditions:

nc <- 100

X<-rnorm(nc)
Y<-rnorm(nc)
Z<-rnorm(nc)
m<-cbind(X,Y,Z)

panelfun <- function(x,y,foo=X,...){
    points(x[foo<0.7],y[foo<0.7],col="black",...)
    points(x[foo>0.7],y[foo>0.7],col="red",...)
}

pairs(m,panel=panelfun)

This gives the same picture as before (well different points because I didnt set a seed). Simply making the color vector would be easier to accomplish this, but you can make the panel function as big as you would like.

Also, the ... allow other arguments to be passed to the points function:

pairs(m,panel=panelfun,pch=16)
0
IRTFM On

lattice::splom works fine. The color indexing needs to be boosted by 1 since R indexing is 1 based rather than zero-based and the logical vectors get coerced as 0 and 1.

library(lttice)
nc=100; h<-rnorm(nc)  
x<-rnorm(nc)
y<-rnorm(nc)
z<-rnorm(nc)
m<-cbind(x,y,z)
splom(m, col=c("blue", "red")[1+(h>0.7)])

enter image description here