這是最好的我似乎能夠通過傳遞參數做:
foo.upper <- function(x,y,ind.upper,col.upper,ind.lower,col.lower,...){
points(x[ind.upper],y[ind.upper],col = col.upper,...)
}
foo.lower <- function(x,y,ind.lower,col.lower,ind.upper,col.upper,...){
points(x[ind.lower],y[ind.lower],col = col.lower,...)
}
pairs(dat[,-5],
lower.panel = foo.lower,
upper.panel = foo.upper,
ind.upper = dat$type == 'brain',
ind.lower = dat$type == 'heart',
col.upper = 'blue',
col.lower = 'red')
注意,每個面板需要的所有參數。 ...
是一個殘酷的情婦。如果在每個函數中只包含面板特定的參數,它似乎可以工作,但是你會從R中獲得大量的警告,試圖將這些參數傳遞給常規的繪圖函數,顯然它們不會存在。
這是我的快速的第一次嘗試,但似乎醜陋:
dat <- as.data.frame(do.call(rbind,data))
dat$type <- rep(c('brain','heart'),each = 100)
foo.upper <- function(x,y,...){
points(x[dat$type == 'brain'],y[dat$type == 'brain'],col = 'red',...)
}
foo.lower <- function(x,y,...){
points(x[dat$type == 'heart'],y[dat$type == 'heart'],col = 'blue',...)
}
pairs(dat[,-5],lower.panel = foo.lower,upper.panel = foo.upper)
我在這裏虐待的r範圍界定在這第二個版本有點醜陋的方式。 (當然,你也可能在格做到這一點更乾淨,但你可能知道)。
我能想到的唯一的選擇是設計使用layout
自己的散點圖矩陣,但是這可能相當一點工作。
格編輯
這裏的至少一個格子的解決方案是一個開始。它應該處理變化x,y軸範圍更好,但我沒有測試過。
dat <- do.call(rbind,data)
dat <- as.data.frame(dat)
dat$grp <- rep(letters[1:2],each = 100)
plower <- function(x,y,grp,...){
panel.xyplot(x[grp == 'a'],y[grp == 'a'],col = 'red',...)
}
pupper <- function(x,y,grp,...){
panel.xyplot(x[grp == 'b'],y[grp == 'b'],...)
}
splom(~dat[,1:4],
data = dat,
lower.panel = plower,
upper.panel = pupper,
grp = dat$grp)
下面是上部和下部不同內容的示例,也許您可以根據自己的需要調整它。 http://gallery.r-enthusiasts.com/graph/Correlation_Matrix_137 – Ben 2013-03-25 22:15:22
@Ben這個例子是在文檔中,但它不繪製不同的數據,只是不同格式的相同數據。 – 2013-03-25 22:23:45