R lattice - eiichiromomma/CVMLAB GitHub Wiki
R) lattice
(lattice関連いろいろ
#自分で定義した関数からlatticeパッケージを呼出す時の注意
対象
latticeパッケージは便利な関数が多い反面クセがある。 cloud, histogram, levelplot, splom, xyplotあたりか。
問題点
コンソールから関数を呼出す限りは何の問題も生じないのだが、functionで呼出すと何も出力されなくなる。 これはlatticeパッケージの描画についてはprintで書き出すタイミングを明示しなければならないためらしい。
myfunc<-function(z)
{
##何も出てこない
splom(z)
readline("--Hit Enter key--")
##表示される
print(splom(z))
readline("--Hit Enter key--")
}
ファイルへの出力
上記と同様に関数で画像への出力を行なう場合でもprintを明示する必要がある。
mfrowが効かないlatticeパッケージのプロットを複数表示する方法
必要なパッケージ
latticeとgridBase ※gridパッケージは無くなったのでgirdBaseを使う。
やりかた
-
gridBaseで新しいページ作成
-
レイアウト決定
-
変数にlatticeのプロットを代入
-
viewportを変更してプロット(newpage=F)
-
くり返し 縦に3つ並べる場合
grid.newpage() pushViewport(viewport(layout = grid.layout(3, 1))) p<-levelplotとか。その1 pushViewport(viewport(layout.pos.col=1, layout.pos.row=1)); print(p, newpage = FALSE) popViewport(1) p<-levelplotとか。その2 pushViewport(viewport(layout.pos.col=1, layout.pos.row=2)); print(p, newpage = FALSE) popViewport(1) p<-levelplotとか。その3 pushViewport(viewport(layout.pos.col=1, layout.pos.row=3)); print(p, newpage = FALSE) popViewport()
細かい操作は未調査
latticeのプロットでマージンをゼロにする
Re: [R] zero margin / marginless plots (in lattice?) が元ネタ
themeの定義
theme.novpadding <-
list(layout.heights =
list(top.padding = 0,
main.key.padding = 0,
key.axis.padding = 0,
axis.xlab.padding = 0,
xlab.key.padding = 0,
key.sub.padding = 0,
bottom.padding = 0),
layout.widths =
list(left.padding = 0,
key.ylab.padding = 0,
ylab.axis.padding = 0,
axis.key.padding = 0,
right.padding = 0))
としてプロット時にpar.settingsに指定する。
例(levelplotのhelpより)
x <- seq(pi/4, 5 * pi, length.out = 100)
y <- seq(pi/4, 5 * pi, length.out = 100)
r <- as.vector(sqrt(outer(x^2, y^2, "+")))
grid <- expand.grid(x=x, y=y)
grid$z <- cos(r^2) * exp(-r/(pi^3))
levelplot(z~x*y, grid, cuts = 50, scales=list(log="e"), xlab="",
ylab="", main="Weird Function", sub="with log scales",
colorkey = TRUE, region = TRUE)
scalesでdraw=Fとして目盛を消し、タイトルも消す
levelplot(z~x*y, grid, cuts = 50, scales=list(log="e",draw=F), xlab="",
ylab="", main="", sub="",
colorkey = TRUE, region = TRUE, par.settings=theme.novpadding)
latticeでフォントサイズを変える
trellis.par
設定からfontsizeを拾って書き換える。 defaultが目盛等で、levelplotのカラーバーを変えるにはtextも書き換える。
fsize <- trellis.par.get("fontsize")
fsize$default <- 20
fsize$text <- 40
trellis.par.set("fontsize", fsize)