52. グラフィックスパラメータ(壱)


グラフィックスパラメータ

高水準作図関数や低水準作図関数で作図する場合,作図関数固有のパラメータ以外にもグラフィックスパラメータと呼ばれるパラメータを指定することが出来る.これにより作図結果の微妙なカスタマイズを行うことが出来,自分好みの出力結果を得ることが出来る.

グラフィックスパラメータ事始

グラフィックスパラメータを設定する方法は,作図関数の引数にパラメータを与える方法と,関数 par() を使って設定する方法の 2 通りがある.前者は一時的にパラメータ値が変更され,後者は永続的にパラメータ値が変更される.重要なことは,グラフィックスパラメータの全てがこの 2 通りの方法で変更出来るわけではなく,一部のグラフィックスパラメータは関数 par() を使ってしかパラメータ値を変更することが出来ない点を理解することである.例えば,色に関するグラフィックスパラメータ col を赤に設定する方法を挙げる.

 
 par(col="red")           # 永続的に(これ以後は)赤色でプロットする
 plot(1:10, col="red")    # 一時的に(このプロットのみ)赤色でプロットする

一部のグラフィックスパラメータには読み取り専用・変更不可なものがあるが,ここでは詳しく扱わないことにする.例えば,

を確認することが出来るが,これらの値を明示的に変更することはできない.

グラフィックスパラメータの永続的変更

まず,関数 par() を使わなければ変更できないグラフィックスパラメータを紹介する.この種のパラメータは領域,余白,座標系などを設定する機能であるものがほとんどであり,一旦変更すると,改めて変更するまでは元に戻らない.

引数

機能

par()

全てのグラフィックスパラメータの現在値がリストとして得られる.

par("文字列")

グラフィックスパラメータ名を文字列で指定すると,そのグラフィックスパラメータの現在値が得られる.グラフィックスパラメータの値を変更する際は,まずこの命令でパラメータ値を確認する.

par("文字列", "文字列")

グラフィックスパラメータを複数指定することも出来る.

par(c("文字列", "文字列"))

par(col=2)

「パラメータ名 = 値」の形で設定することでグラフィックスパラメータの値を変更する.

par(col=2, lty=3)

複数のグラフィックスパラメータを一度に変更することも出来る.

par(list(col=2, lty=3))

関数 par() の使い方

par() の使い方を以下に挙げる

 
 par(new=T)         # new を TRUE に設定すると,現在の作図に次の作図を上書きする
 par(ask=TRUE)      # 作図する前に『作図してよいですか?』と質問させるようにする
 help(par)          # 全てのグラフィックスパラメータのヘルプが表示される

パラメータ new を TRUE にしておくと次に描く図は前の図に上書きして描かれ,パラメータ ask を TRUE にしておくと help の example を閲覧する際に作図例が一瞬で流れてしまうのを防ぐことが出来る.

グラフィックスパラメータ値の一時退避と復帰

関数 par() を使わなければ変更できないグラフィックスパラメータの値を変更する場合は,適当な変数に現在のパラメータの値を保存しておくのが得策である.R では便利なことに,グラフィックスパラメータの値を 1 コマンドで一切合財保存することが出来る.

 
 oldpar <- par(no.readonly = TRUE)     # 現在のグラフィックスパラメータ値を退避する
 oldpar <- par(col=1, lty=2)           # 一部だけ保存する
 par(oldpar)                           # 作業前のグラフィックスパラメータ値に戻す
                                       # 関数を抜けた後にパラメータ値は元に戻る

関数定義内で,関数 par() を使ってグラフィックスパラメータを変更する場合も,元のグラフィックスパラメータの値を一切合財保存した上で作業をし,関数の最後に元に戻すことをお勧めする.

 
 myfunc <- function () {
   oldpar <- par(no.readonly = TRUE)   # 現在のグラフィックスパラメータの値を退避
   on.exit(par(oldpar))                # 関数がエラー中断してもパラメータを復帰
   par(col=2);  plot(1:10)             # 色を赤に変更してからプロットを行う
 }

作図領域・余白・座標系

関数 par() を使わなければ変更できないグラフィックスパラメータは,大抵がプロット領域 (関数 plot() で散布図を描いた場合:四角の枠とその中に描かれた点や線などがある領域)と余白(プロット領域の周囲,すなわち枠の外側の目盛や目盛のラベル,軸のラベルやタイトルなどが描かれる部分),作図領域(プロット領域+余白)及びデバイス領域に関するパラメータとなっている.以下に概念図を示す.

デバイス領域とは,グラフを描いたときに表示されるウインドウの領域のことで,普段はデバイス領域と作図領域はほぼ一致しているが,デバイスを分割している場合に違いが出てくる.デバイスを分割したとき の概念図を以下に示す.

デバイスが ps, eps ならば,デバイス領域は用紙の大きさ(用紙の外周)となる.

次に,作図領域とプロット領域の違いを示す.

作図範囲に関するパラメータ

xpd に FALSE を指定するとプロット領域内に収まる部分だけ図が描かれ,TRUE を指定すると作図領域内に収まる部分だけ図が描かれる.NA を指定するとデバイス領域全体に図が描かれる.以下に例を示す.

 
 library(rpart)
 result <- rpart(Species ~ ., data=iris)   # 直前で par(xpd=F) 又は par(xpd=NA) を実行する
 plot(result)
 text(result)

 

par(xpd=F) とした時

 

par(xpd=T) とした時

プロット領域(plot region)の大きさや位置を指定するパラメータ

引数

機能

pin = c(6,6)

プロット領域の幅と高さをインチ単位で指定する.

plt = c(0.1, 0.9, 0.1, 0.9)

プロット領域の x ,y 軸方向の両端の位置の比率を指定する.c(0, 1, 0, 1) と変更すれば余白が全くない出力が得られる.

ps = 12

文字とシンボルの大きさを整数値で指定する.

pty = "m"

"s" は正方形のプロット領域,"m" は最大のプロット領域を生成する."m" を設定した場合,プロット領域でも余白でもない空白部分が出来る場合もある.

 ちなみに,par("usr") でプロット領域を知ることが出来る.

 
 par("usr")

作図領域(figure region)の大きさや位置を指定するパラメータ

引数

機能

fig = c(0, 1, 0, 1)

作図領域の x ,y 軸方向の両端の位置の比率を指定する.初期値は c(0, 1, 0, 1) で,これは作図領域をフルに使用していることを示しており,c(0, 0.5, 0.5, 1) と変更すれば左上の方に作図されることになる.
この値を設定した後,現在のプロットにグラフを描き加えるときは明示的に par(new=T) とする必要がある(この点は S と異なる).

fin = c(5,5)

作図領域の幅と高さを指定する.例えば par("fin") で調べた結果が [6.968749 6.958332] であった場合に c(5, 5) を指定すれば,描画結果は少し小さめの出力となる.
この値を設定した後,現在のプロットにグラフを描き加えるときは明示的に par(new=T) とする必要がある(この点は S と異なる).

余白に関するパラメータ

余白をあまり小さくしてしてしまうと軸のラベルなどが描けなくなってしまうので注意.

引数

機能

mai = c(0.85, 0.68, 0.68, 0.35)

底辺,左側,上側,右側の順に余白の大きさをインチ単位で指定する.mar で余白サイズを変えると plt,pin の値が変更される.

mex = 1

プロットの余白の座標を指定するのに使われる文字サイズの拡大率を指定する.このパラメータを変更すると,余白の大きさもそれに応じて変化する.複数図表を使う場合は,このパラメータ値が自動的に 0.5 に変更されることがあるので注意が要る.

mar = c(5, 4, 4, 2)

底辺,左側,上側,右側の順に余白の大きさを行の高さ(mex)で指定する.デフォルトでは高水準作図関数は軸のラベルを 3 行分離して描くので,底辺と左部には最低でも 4 行分 ( 4 mex 分) の余白が必要となる.mai で余白サイズを変えると plt,pin の値が変更される.

omi = c(0, 0, 0.8, 0)

底辺,左側,上側,右側の順に外周の大きさをインチ単位で表した (outer margins in inches) もので指定する.

oma = c(2, 0, 3, 0)

外周の底辺,左側,上側,右側の順に外側余白(outer margin)を行の高さ(mex)で指定する.

omd = c(0, 1, 0, 1)

ウインドウ全体を 0 から 1 の範囲として,外周を除いた複数図表の両端の位置 (x1, x2, y1, y2) を指定する.この場合は外周は存在しないことになる.

例えば右側に y 軸座標を描く場合,グラフを描く前に mar の値を設定して,右側の余白を余分に取る必要がある.

 
 par(mar=c(5,4,5,4))
 plot(1:10)
 axis(side=4)