Наложение графика пар на основе условия

**Редактировать:**Извините, но ситуация может быть немного сложнее, чем я показал. Тем не менее, оба ваших скрипта работают, хотя первый может быть не так понятен для большого набора данных из-за перекрытия точек! Спасибо большое Саша!

Я хотел бы сначала показать пары нескольких переменных, а затем наложить выбранные данные одного и того же набора данных. Обычно наложение может быть достигнуто с помощью par(new=T) следующим образом:

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")

Однако кажется, что настройка par() не подходит для такого использования.

Тогда, возможно, может помочь библиотека решетки, например. splom(), но я не знаю, действительно ли это работает и как. Может ли кто-нибудь дать несколько предложений?


person Marco    schedule 20.02.2011    source источник


Ответы (2)


Я предполагаю, что paris должно быть pairs? Функция pairs не имеет аргумента add или около того, это, вероятно, также не будет таким тривиальным, поскольку график имеет 9 панелей (просто выполнение points будет отображаться на последней панели). но не так сложно сделать то, что вы хотите, на одном графике, используя 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)

введите здесь описание изображения

Редактировать:

Еще одна вещь, которую вы можете сделать в pairs, это фактически установить функцию, которую вы хотите выполнять на каждой панели. По умолчанию это points, но вы можете расширить его, включив некоторые условия:

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)

Это дает ту же картину, что и раньше (ну, разные точки, потому что я не устанавливал начальное число). Было бы проще сделать это, просто создав вектор цвета, но вы можете сделать функцию панели настолько большой, насколько захотите.

Кроме того, ... позволяет передавать другие аргументы в функцию points:

pairs(m,panel=panelfun,pch=16)
person Sacha Epskamp    schedule 20.02.2011

lattice::splom работает нормально. Индексация цвета должна быть увеличена на 1, поскольку индексация R основана на 1, а не на нуле, а логические векторы приводятся к 0 и 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)])

введите здесь описание изображения

person IRTFM    schedule 02.05.2012