Sobrepor gráfico de pares com base na condição
Pergunta
**Editar:**Sinto muito, mas a situação pode ser um pouco mais complexa do que mostrei.No entanto, ambos os seus scripts funcionam, embora o primeiro possa não ser tão claro para grandes conjuntos de dados devido à sobreposição de pontos!Muito obrigado Sacha!
Gostaria primeiro de mostrar os pares de diversas variáveis e depois sobrepor os dados selecionados do mesmo conjunto de dados.Normalmente, a sobreposição pode ser obtida usando par(new=T)
assim:
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")
Contudo, parece que o par()
configuração não funciona para esse tipo de uso.
Então, provavelmente a biblioteca treliça poderia ajudar, ex. splom()
, mas não sei se realmente funciona e como.Alguém poderia dar algumas sugestões?
Solução
eu assumo paris
devemos ser pairs
?O pairs
função não tem um add
argumento ou algo assim, provavelmente também não seria tão trivial, já que o enredo tem 9 painéis (simplesmente fazendo points
será plotado no último painel).mas não é tão difícil fazer o que você quer em um único enredo usando 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)
Editar:
Outra coisa que você pode fazer em pairs
na verdade é definir a função que você deseja executar em cada painel.Por padrão, isso é points
, mas você pode estender isso para incluir algumas condições:
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)
Isso dá a mesma imagem de antes (pontos bem diferentes porque não coloquei uma semente).Simplesmente criar o vetor de cores seria mais fácil de conseguir isso, mas você pode fazer o painel funcionar tão grande quanto desejar.
Também o ...
permitir que outros argumentos sejam passados para o points
função:
pairs(m,panel=panelfun,pch=16)
Outras dicas
lattice::splom
funciona bem.A indexação de cores precisa ser aumentada em 1, pois a indexação R é baseada em 1, em vez de baseada em zero, e os vetores lógicos são coagidos como 0 e 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)])