如何在 R 中成对函数的上下面板中使用不同的数据集?
How to use different sets of data in lower and upper panel of pairs function in R?
想在 R 中创建散点图矩阵,所以我使用函数 pairs
,如下所示:
pairs(X, lower.panel=panel.contour1, gap=0.5)
如何将一组不同的数据(我们称之为 Y
)引入 panel.contour1
函数?基本上我需要为矩阵图的上三角和下三角使用 2 组不同的数据。
也许有一种方法可以传递额外的数据集,但做不到这一点,您可以 rbind
您的 X
和 Y
,然后参考 [=14] 中的相关子集=] 和 upper.panel
.
例如:
X <- matrix(runif(300), ncol=3)
Y <- matrix(c(sort(runif(100, 0, 10)),
sort(runif(100, 0, 10)),
sort(runif(100, 0, 10))), ncol=3)
XY <- rbind(X, Y)
pairs(XY,
lower.panel=function(x, y, ...) {
Xx <- x[seq_len(nrow(X))] # corresponds to X subset
Xy <- y[seq_len(nrow(X))] # corresponds to X subset
usr <- par("usr"); on.exit(par(usr))
par(usr = c(range(X[, -ncol(X)]), range(X[, -1]))) # set up limits
points(Xx, Xy)
if(par('mfg')[2] == 1) axis(2) # if left plot, add left axis
if(par('mfg')[1] == ncol(X)) axis(1) # if bottom plot add bottom axis
},
upper.panel=function(x, y, ...) {
Yx <- x[(nrow(X) + 1):length(x)] # Y subset
Yy <- y[(nrow(X) + 1):length(y)] # Y subset
cntr <- outer(Yx, Yx, FUN='*') # arbitrary function for contour
usr <- par("usr"); on.exit(par(usr))
par(usr = c(range(Y[, -1]), range(Y[, -ncol(Y)]))) # set up limits
contour(Yx, Yy, cntr, add=TRUE)
if(par('mfg')[2] == ncol(Y)) axis(4) # if right plot, add right axis
if(par('mfg')[1] == 1) axis(3) # if top plot, add top axis
},
tick=FALSE, # suppress the default tick marks
line=10) # move the default tick labels off the plot
想在 R 中创建散点图矩阵,所以我使用函数 pairs
,如下所示:
pairs(X, lower.panel=panel.contour1, gap=0.5)
如何将一组不同的数据(我们称之为 Y
)引入 panel.contour1
函数?基本上我需要为矩阵图的上三角和下三角使用 2 组不同的数据。
也许有一种方法可以传递额外的数据集,但做不到这一点,您可以 rbind
您的 X
和 Y
,然后参考 [=14] 中的相关子集=] 和 upper.panel
.
例如:
X <- matrix(runif(300), ncol=3)
Y <- matrix(c(sort(runif(100, 0, 10)),
sort(runif(100, 0, 10)),
sort(runif(100, 0, 10))), ncol=3)
XY <- rbind(X, Y)
pairs(XY,
lower.panel=function(x, y, ...) {
Xx <- x[seq_len(nrow(X))] # corresponds to X subset
Xy <- y[seq_len(nrow(X))] # corresponds to X subset
usr <- par("usr"); on.exit(par(usr))
par(usr = c(range(X[, -ncol(X)]), range(X[, -1]))) # set up limits
points(Xx, Xy)
if(par('mfg')[2] == 1) axis(2) # if left plot, add left axis
if(par('mfg')[1] == ncol(X)) axis(1) # if bottom plot add bottom axis
},
upper.panel=function(x, y, ...) {
Yx <- x[(nrow(X) + 1):length(x)] # Y subset
Yy <- y[(nrow(X) + 1):length(y)] # Y subset
cntr <- outer(Yx, Yx, FUN='*') # arbitrary function for contour
usr <- par("usr"); on.exit(par(usr))
par(usr = c(range(Y[, -1]), range(Y[, -ncol(Y)]))) # set up limits
contour(Yx, Yy, cntr, add=TRUE)
if(par('mfg')[2] == ncol(Y)) axis(4) # if right plot, add right axis
if(par('mfg')[1] == 1) axis(3) # if top plot, add top axis
},
tick=FALSE, # suppress the default tick marks
line=10) # move the default tick labels off the plot