私は純粋に で最初のステップを試みています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)
アップデート
求められたので、これが私が念頭に置いている元の問題の設計/レイアウトです (上記は最小限の/学習例にすぎません)。cm単位は私だけのものでした(最終的には「相対的」である必要があります)。もちろん、パネルの数は異なる場合があります。グラフィックを作成する関数が(印刷/描画なしで)オブジェクトを返すように、すべてのパーツをグリッドオブジェクトにしたいと思います。このように、各パーツは後で変更できます。グラフィックは、次元 5 (またはそれ以下) の配列からの結果を表示する必要があります。1 つの次元が行パネル [ row.vars
]、列パネル [ col.vars
]、各パネルの x 軸[ ] に 1 つずつ表示されxvar
、各パネルは配列の2つの異なる次元が含まれています(色と線の種類によって異なります)[私は使用d
し、n
図中]。もちろん、配列が 4 次元の場合、上記の設計の行 8 は欠落しているはずです。グリッドを介してレイアウトを構築することはできますが、問題はそこからどのように継続するかです。それが、上記の「最小限の例」で表現したかったことです。