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を使う。

やりかた

  1. gridBaseで新しいページ作成

  2. レイアウト決定

  3. 変数にlatticeのプロットを代入

  4. viewportを変更してプロット(newpage=F)

  5. くり返し 縦に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)