グラフィックスパラメータを設定する、確認する
R のグラフィックスを制覇するための足掛かりとして、グラフィックスパラメータに関 る Tips を作りましょう。とりあえず、?par で表示されるヘルプファイルを出発点にし て、各パラメータについて皆さんからの補足・注釈を集めませんか。
何よりも実例を与えることが使いかたをのみこむ最善・最短の道です。各パラメータに ついて短い参考例を与えたいですね
完全なコードは一番最後にどうぞ。たくさん集まればそれだけ独立しましょう。実行例の 画像ファイルも与えられたら最高ですね
par はグラフィッスパラメータを設定したり、確認するのに使える。 パラメータは pa r への引数として tag = value の形式で指定することにより設定できる。 またタグ付 の値のリストで与えることもできる
par(..., no.readonly = FALSE) <highlevel plot> (..., <tag> = <value>)
パラメータが設定されると、直前の値が表に表示されない名前付きリストとして返される。 そうしたリストはパラメータ値を復元するために、引数として par に渡すことがで る。 復元できるパラメータの完全なリストは par(no.readonly = TRUE) で得られる 単独のパラメータ値が問いあわされると、返り値は一つの文字列になる。 複数のパラ ータ値が問いあわされると、返り値は文字列のリストになり、リスト名はパラメータ値である。 一つのパラメータを設定するとリストを返すが、一つのパラメータの問い合わ はベクトルを返す、という 非一貫性に注意せよ
パラメータの現在値は par に一つもしくは複数の文字ベクトルを与えることにより問 合わせることができる。 par() (引数無し) もしくは par(no.readonly=TRUE) は全ての作図パラメータを(名前付 きリストとして)得るのに 使える。それらの名前は現在変量 .Pars から取られる。.Pars .readonly は par の引数のうち readonly であるものを与える
R.O. 引数 := 読み取り専用引数: これらは問い合わせにおいてのみ使われる、つまり それらをユーザーが設定することはできない。
R.O. 以外の全てと、以下の 低水準引数 パラメータが、高水準もしくは中水準プ 関数(例えば plot, points, lines, axis, title, text, mtext)で設定可能で ある
"ask" ,"fig", "fin" ,"mai", "mar", "mex" ,"mfrow", "mfcol", "mfg" "new" , "oma", "omd", "omi" , "pin", "plt", "ps", "pty" , "usr" , "xlog", "ylog"
(参考) 関数titleで図の上下の余白部分にタイトルを追加することができます。引数mainに上部余白に描かれる主タイトルを、subに下部余白に描かれるサブタイトルを指定します。主タイトルの文字は、cexの1.5倍の大きさで描かれます。もちろんmain、subどちらか一方だけを指定することも可能です。また、引数xlab、ylabに軸のラベルを指定し、描かせることもできます。
色指定は異なった幾つかの方法で行える。最も単純な方法は色名を与える文字列を用いることである (例えば "red"。Rにおける色の名前)。可能な色のリストは関数 colors で得られる。もう一つの方法として、三つのRGB成分を "#RRGGBB" の形の文字列で直接指定できる、ここで 対 RR, GG, BB は 00 から FF まで範囲の値を与える二桁の16進数である。色はまた色の小さな表の番号を与えることで指定できる。これは S との互換性のために用意されている
幾つかの高水準プロット関数のパラメータは plot.default; 他の設定パラメータは colo rs, gray, rainbow, rgb; options を見よ; グラフィックデバイスは x11, postscript そしてデバイス領域の設定は layout と split.screen を見よ
split.screenを使う。引数には、分割方法を定義する長さ2のベクトルあるいは (定義する副画面の個数) × 4 の行列を与える。分割の結果、副画面の縦あるいは横が全画面の半分より小さくなれば,その時定義したすべての副画面について作図パラメータcexとmexが 0.5に設定される。
split.screenにベクトル c( m , n ) を与えると、作図パラメー タmfrowによる規則的な分割と同じように、縦を m 個、横を n に分割する。例えば、上下二つに分割するには以下のようにする。
> split.screen(c(2,1)) [1] 1 2
分割の結果できた各副画面は番号によって管理される。split.screen は分割の結果できた副画面の番号を返す。上記の例では上側が副画面1、下側が副画面2になる。引数screenに分割する副画面の番号を指定することによって、その副画面をさらに分割することができ,例えば、先ほどの例でできた副画面2をさらに3つに分割するには、
split.screen(c(1,3), screen = 2) [1] 3 4 5
とする。
split.screenに (定義する副画面の個数) × 4 の行列を与えて画面定義を行なうこともできる。この場合は各行が個々の副画面を定義する。 各行には、副画面を定義する画面の左下隅を (0, 0),右上隅を (1, 1) とする座標系で、各副画面の大きさと位置を
左下隅のx座標、右上隅のx座標、左下隅のy座標、右上隅のy座標
の順で与える。副画面は互いに重なりがあっても構いません。この行列は prompt.screenを用いて対話的に作るのが簡単。
関数screenで、作図対象とする副画面を指定する。例えば、
> screen(1)
で副画面1を作図対象画面にする。この後、通常の作図方法によって副画面1 にグラフを描くことができる。例えば、
> screen(1) # 副画面1を作図対象にする。 > plot(corn.rain) # 副画面1に作図する。 > screen(3) # 副画面3を作図対象にする。 > plot(corn.yield) # 副画面3に作図する。
によって、副画面1と副画面3に、順に散布図を描くことができる。通常screenは指定された副画面を消去しますが、new=Fと指定すれば副画面の消去を行なわない。
split.screenによる画面分割を行なっている場合には、関数frameによる図の消去はできない。また、高水準作図関数も画面消去をしない。関数screenを実行すると画面消去が行なわれますが、関数 erase.screenによっても副画面の図を消去することができる。 erase.screenの引数には副画面の番号を指定する。例えば、
> erase.screen(3)
で副画面3に描かれている図を消去することができる。 画面全体を消去する[*1]には、
> erase.screen(eject=T)
とする。
通常の1画面形式に戻るには
close.screen(all=T)
を実行する。
par("cxy") はユーザー座標にスケール化された par("cin")/par("pin") である。 与 られた ch に対する c(strwidth(ch),strheight(ch)) のほうが普通もっと正確である とを注意せよ
adj の値はテキスト文字列が整形される仕方を決める。値 0 は左揃いの左揃いのテキス トを生み出し、 0.5 は中心揃えのテキスト、そして値 1 は右揃えのテキストを生み出す 。 text の adj 引数は又 x- および y- 方向で異なった揃え方 adj = c(x,y) を認める ことを注意しよう。
プロットされるテキストや記号が規定の大きさに比べどれだけ縮小・拡大されるかを決める数値
度で指定した単一文字の回転角を指定する数値。90度の倍数以外の数値が使えることを期待すべきではない。 文字列の回転を行う srt と比較せよ
整数; テキストと記号の point 単位のサイズ
論理値 (plot.default 中の log を見よ)。もし TRUE なら、対数軸が使われる。新しい デバイスに対しては、既定値は FALSE である、つまり 線形尺度
論理値 (plot.default 中の log を見よ)。上の xlog を見よ
形式 (x1, x2, n) のベクトル
形式 (y1, y2, n) のベクトル
上の xaxs を見よ
"n" を指定すると軸が設定されるが、プロットされない。
作図領域の幅と高さの小さい方への割合で指定。 もし tck=1 ならグリッド線が引かれる 。既定の設定は tcl=-0.5 を使用 (以下を見よ)
テキスト行の高さへの割合で指定。既定値は -0.5
FALSE に取ると、高水準プロット関数はそれが生み出すプロットに軸の注釈や全体 タイトルを付けない。 既定値は注釈を付ける
軸の注釈を現在値に比べどれだけ拡大するかを指定する拡大率
軸への注釈の仕方を修正する c(x, y, len) の形の数値ベクトル。 x と y の値は x と y 軸の軸目盛の(概略の)数を与え、 len はラベルサイズを与える。 現在のところ、len は 移植されていない。
x と y軸ラベルを現在値に比べどれだけ拡大するかを指定する拡大率
これは軸やプロット周りの箱といった事柄に使われる既定色である
既定値は c(3, 1, 0)
> x <- y <- 1:10; z <- matrix(rnorm(100), ncol=10) > image(x, y, z, col=topo.colors(12)) # 地形図色調を12段階で使
これは軸やプロット周りの箱といった事柄に使われる既定色である
hsv(.., gamma) を見よ
プロットの他の注釈テキストとの相対値
デバイスの描画領域中の図領域の(NDC)座標を与える c(x1, x2, y1, y2) の形式の数値ベ クトル
c(x, y) の形式の数値ベクトル
c(bottom, left, top, right) の形式の数値ベクトル
c(bottom, left, top, right) の形式の数値ベクトルで、プロットの四隅に置かれる余白のサイズをテキスト行単位(?)で与え る。既定値は c(5, 4, 4, 2) + 0.1
形式 c(x1, x2, y1, y2) の形のベクトルで作図領域の座標を現在の図領域の割合で与える
形式 c(bottom, left, top, right) の形のベクトル
形式 c(x1, x2, y1, y2) の形のベクトルで NDC (=normalized device coordinates) に おける外側余白領域を与える、つまり、 デバイス領域の割合(区間 [0,1] 中)として
形式 c(bottom, left, top, right) の形のベクトルで外側余白の大きさをインチ単位で 与える
"s" は正方形の作図領域、"m" は最大の作図領域を生成する
形式 c(x1, x2, y1, y2) のベクトル
font=1 プレーンテキス font=2 ボールド font=3 イタリック font=4 ボールドイタリック
1 プレーンテキスト 2 ボールド 3 イタリック 4 ボールドイタリック
1 プレーンテキスト 2 ボールド 3 イタリック 4 ボールドイタリック
1 プレーンテキスト 2 ボールド 3 イタリック 4 ボールドイタリック
1 プレーンテキスト 2 ボールド 3 イタリック 4 ボールドイタリック
他の文字列/文字の回転 (par(srt = ..) を用いた) は軸ラベルに影響しないことを注意 せよ
lty=0 または lty="blank" 無し(透明の線) lty=1 または lty="solid" 実線 lty=2 または lty="dashed" ダッシュ lty=3 または lty="dotted" ドット lty=4 または lty="dotdash" ドットとダッシュ lty=5 または lty="longdash" 長いダッシュ lty=6 または lty="twodash" 二つのダッシュ
最大 8 文字の文字列(c(0:9, "A":"F") で始まる) を与えても良く、交互に引かれそして スキップされる線の構成要素 (典型的には points/pixel 単位)を表す
lty="44" ダッシュ lty="13" ドット
正の数値で線分の幅を与える。既定値は 1
点のプロットの既定値を与える記号を指定する整数又は単一文字
pch=1 ○ pch=2 △ pch=3 + pch=4 × pch=5 ◇ pch=6 ▽ pch=7 □に+を重ねたもの pch=8 * pch=9 ◇に+を重ねたもの pch=10 ○に+を重ねたもの pch=11 ▽に△を重ねたもの pch=12 □に+を重ねたもの pch=13 ○に×を重ねたもの pch=14 □にVを重ねたもの pch=15 ■ pch=16 ● pch=17 ▲ pch=18 ◆ pch=19 ● pch=20 ●(小さい)
現在のプロットのインチ単位の幅と高
プロットの周囲に描かれる箱のタイプを決める文字列。 もし bty が "o", "l", "7", "c ", "u", 又は "]" のどれかであれば、結果の箱は対応する大文字に似たものになる。値 "n" は箱を描く
FALSE なら、全てのプロットは作図領域内に刈り込まれる TRUE なら、全てのプロットは図領域内 に刈り込まれる NA なら全てのプロットはデバイス領域内に刈り込まれる
整数; テキストと記号の point 単位のサイズ
文字; 既定のプロットタイプで既定値は "p"、 plot.default(type=...) を見よ
現在は完全に無視される
論理値; もし TRUE で他の引数がなければ、以降の par(.) 呼出で設定可能なパラメータ だけが返される
論理値。もし TRUE なら、ユーザーは新しい図を描く前に何かキー入力を促される 一連の画像出力が流れさるのを防ぐのに有効
par(ask=TRUE) # 次の画像出力前に確認を求められる par(ask=FALSE) # 元に戻
c(nr, nc) の形式のベクトル。 引き続く図はデバイス上にそれぞれ 列主導 (mfcol) 又 は 行主導 (mfrow) の nr-by-nc 配列として描かれる。 別法 layout(..) と split.scre en(..) を考慮しよ
mfcol=c(2,2) # 作図領域を 2x2 に4分割し、列主導で順に作図
c(i, j) の形式のベクトルで、i と j は図の配列中のどの図を次に描くか(設定時なら) 、 描かれているか(問い合わせ時なら)を指示する。配列は既に mfcol か mfrow で設定 されている必要がある。 S との互換性のために、形式 c(i, j, nr, nc) も可能で で nr と nc は現在の行数と列数で無ければならない。ミスマッチは警告がでるが無視 れるであろう
論理値、既定値は FALSE。もし TRUE に設定すれば、次の高水準プロット命令 (実際は plot.new(.)) は、描画の前に現在のフレームを 消去せず、 あたかもそれが新しいデバイ スであるかのように扱う
new=TRUE 直前のプロットに次のプロットを上描き
(R はプロット範囲の外の点をプロットしなくても何も 警告しない。) 何種類かの程度の エラー警告が望ましい
op <- par(mfrow = c(2, 2), # 一つのプロットに 2 x 2 の図を描く pty = "s") # 正方形プロット領域、デバイスのサイズと独立に指定 ## プロットの最後に直前の設定に戻す par(op) ## 別法 op <- par(no.readonly = TRUE) # 設定可能なすべてのパラメータのリスト ## 沢山のプロットと par(.) 呼出をし、それからリセット par(op) par("ylog") # 間違い plot(1:12,log="y") par("ylog") # 正しい ( nr.prof <- c(prof.pilots=16,lawyers=11,farmers=10,salesmen=9,physicians=9, mechanics=6,policemen=6,managers=6,engineers=5,teachers=4, housewives=3,students=3,armed.forces=1)) par(las=3) barplot(rbind(nr.prof)) par(las=0) # 既定値に戻す ex <- function() { old.par <- par(no.readonly = TRUE)# all par settings which could be changed. on.exit(par(old.par)) #終了時に par(old.par) を実行(エラー発生時にも) ## ... ## ... 沢山の par(.) 呼出をし、それからプロット ## ... invisible() #-- いまや par(old.par) が実行される } ex()
例:標準正規分布の密度関数のグラフを -4<=x<=4 の範囲でプロット。そのうち -2<=x<=2 の範囲に灰色の影を付ける(実際は多数の多角形に分割し polygon 関数で塗りつぶし)
> foo <- function() { plot(dnorm,-4,4) xvals <- seq(-2,2,length=50) # 領域をx軸方向に50個の多角形(台形)に等分割 dvals <- dnorm(xvals) # 対応するグラフの高 polygon(c(xvals,rev(xvals)),c(rep(0,50),rev(dvals)),col="gray") # xvals,rep(0,50) の組合せでx軸上の辺を結ぶ # rev(xvals),rev(dvals) の組合せでグラフに沿った辺を結ぶ }
> plot(x, y, xaxt="n") > axis(1, labels=FALSE) > pr <- pretty(x) > par(xpd=TRUE) > text(pr, par("usr")[3], pr, adj=0, srt=-45) # srt=-45 で時計回りに45度回転
行列を画像と考え image 関数で表示する。option の col で色調を変えることが出来る
(col の例: rainbow,heat.colors,topo.colors,terrain.colors, gray)
> x <- y <- 1:10 > z <- matrix(rnorm(100), ncol=10) > image(x, y, z, col=topo,colors(12)) # 地形図色調を12段階で使用