我只是在尝试我的第一步grid
。作为练习,我想创建一个pairs()
完全基于grid
. 下面的函数myplotGrob
应该创建网格对象(grob;或 gTree)并返回该对象。
我不确定继续的最佳方式是什么。应该使用哪些单位?(也试过"null"
) 是frameGrob
为了设置布局吗?(这是我从 Paul Murrell 的书中了解到的)我如何选择/调整视口以便获得所需的情节(到目前为止,我只看到一团糟)布局是要预先设置的还是它更好地逐步“连接”附加面板以获得 (4, 4) 绘图矩阵?
require(grid)
require(mvtnorm)
set.seed(271)
X <- rmvnorm(1000, mean=1:4, sigma=diag(4:1)) # goal: draw this in a pairs plot
## auxiliary function
panel <- function(x, y) pointsGrob(x=x, y=y, name="panel", gp=gpar(), vp=NULL)
## creates and returns a gTree (class)
myplotGrob <- function(X, name=NULL, gp=NULL, vp=NULL)
{
## x-axis grob
## y-axis grob
## ...
## set up layout
layout <- grid.layout(4, 4, # (4, 4) matrix
widths=rep(0.25, 4), heights=rep(0.25, 4),
default.units="npc")
## pushViewport(viewport(layout=layout)) # required???
all <- frameGrob(layout=layout) # produces a gTree without children
for(i in 1:4) {
for(j in 1:4) {
## group grobs together
gt <- gTree(X,
children=gList(panel(X[,i], X[,j])),
name=name, gp=gp, vp=vp, cl="myplotGrob")
all <- placeGrob(all, gt, row=i, col=j)
}
}
all
}
## draw the gTree
grid.myplot <- function(...) grid.draw(myplotGrob(...))
## call
grid.myplot(X)
更新
正如所要求的那样,这是我想到的原始问题的设计/布局(上面只是一个最小的/学习示例)。以厘米为单位的单位只适合我(它们最终应该是“相对的”)。当然,面板的数量可能会有所不同。我希望所有部分都是网格对象,以便创建图形的函数将返回一个对象(不打印/绘图)。这样,每个部分都可以在之后进行修改。图形应显示维度为 5(或更小)的数组的结果:一个维度显示在行面板 [ row.vars
] 中,一个维度显示在列面板 [ ] 中,一个维度显示在col.vars
每个面板的 x 轴 [ xvar
] 中,每个面板可以包含 2 个不同维度的数组(因颜色和线型而异)[我使用d
和n
图中]。如果当然,如果数组是四维的,那么上面设计的第 8 行应该是缺失的。我可以通过网格构建布局,但整个问题是如何从那里继续。这就是我想用上面的“最小示例”来表达的。