グラフィックスパラメータを設定する、確認する

R のグラフィックスを制覇するための足掛かりとして、グラフィックスパラメータに関 る Tips を作りましょう。とりあえず、?par で表示されるヘルプファイルを出発点にし て、各パラメータについて皆さんからの補足・注釈を集めませんか。

何よりも実例を与えることが使いかたをのみこむ最善・最短の道です。各パラメータに ついて短い参考例を与えたいですね

完全なコードは一番最後にどうぞ。たくさん集まればそれだけ独立しましょう。実行例の 画像ファイルも与えられたら最高ですね

par はグラフィッスパラメータを設定したり、確認するのに使える。 パラメータは pa r への引数として tag = value の形式で指定することにより設定できる。 またタグ付 の値のリストで与えることもできる

グラフィックスパラメータ指定関数 par() に関する一般的事項

用法

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 との互換性のために用意されている

関数 rgb, hsv, gray そして rainbow は色を生成する追加の方法を提供する

関連事項

幾つかの高水準プロット関数のパラメータは plot.default; 他の設定パラメータは colo rs, gray, rainbow, rgb; options を見よ; グラフィックデバイスは x11, postscript そしてデバイス領域の設定は layout と split.screen を見よ

デバイス領域の設定・・・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画面形式に戻る

 通常の1画面形式に戻るには

close.screen(all=T)

を実行する。

グラフィックスパラメータ指定関数 par() の引数

文字、テキスト

cin インチで指定した文字サイズ (幅、高さ)

cra "rasters"(pixels) 単位で指定した既定文字のサイズ (幅、高さ)

csi インチ単位で与えた(既定サイズの)文字高

cxy ユーザー指定座標単位で指定した既定文字のサイズ (幅、高さ)

par("cxy") はユーザー座標にスケール化された par("cin")/par("pin") である。 与 られた ch に対する c(strwidth(ch),strheight(ch)) のほうが普通もっと正確である とを注意せよ

adj テキストの整形の仕方

adj の値はテキスト文字列が整形される仕方を決める。値 0 は左揃いの左揃いのテキス トを生み出し、 0.5 は中心揃えのテキスト、そして値 1 は右揃えのテキストを生み出す 。 text の adj 引数は又 x- および y- 方向で異なった揃え方 adj = c(x,y) を認める ことを注意しよう。

cex テキスト、記号の縮小・拡大率

プロットされるテキストや記号が規定の大きさに比べどれだけ縮小・拡大されるかを決める数値

crt 度で指定した単一文字の回転角

度で指定した単一文字の回転角を指定する数値。90度の倍数以外の数値が使えることを期待すべきではない。 文字列の回転を行う srt と比較せよ

ps テキストと記号の point 単位のサイズ

整数; テキストと記号の point 単位のサイズ

srt 度単位での文字列の回転

軸タイプ

xlog 対数 x 軸の使用を指示する論理値

論理値 (plot.default 中の log を見よ)。もし TRUE なら、対数軸が使われる。新しい デバイスに対しては、既定値は FALSE である、つまり 線形尺度

ylog 対数 y 軸の使用を指示する論理値

論理値 (plot.default 中の log を見よ)。上の xlog を見よ

xaxp 両端の軸目盛の座標と、それらの間の区間の

形式 (x1, x2, n) のベクトル

yaxp 両端の軸目盛の座標と、それらの間の区間の

形式 (y1, y2, n) のベクトル

xaxs x 軸にたいして用いられる軸区間の計算法

yaxs y 軸にたいして用いられる軸区間の計算法

上の xaxs を見よ

xaxt 軸のタイプを指定する文字

yaxt 軸のタイプを指定する文字

"n" を指定すると軸が設定されるが、プロットされない。

tck 目盛マークの長さ

作図領域の幅と高さの小さい方への割合で指定。 もし tck=1 ならグリッド線が引かれる 。既定の設定は tcl=-0.5 を使用 (以下を見よ)

tcl 目盛マークの長さ

テキスト行の高さへの割合で指定。既定値は -0.5

軸注釈

ann 軸注釈、タイトルの有無

FALSE に取ると、高水準プロット関数はそれが生み出すプロットに軸の注釈や全体 タイトルを付けない。 既定値は注釈を付ける

cex.axis 軸の注釈拡大率

軸の注釈を現在値に比べどれだけ拡大するかを指定する拡大率

font.axis 軸の注釈に使われるフォント

lab 軸への注釈の仕方を修正

軸への注釈の仕方を修正する c(x, y, len) の形の数値ベクトル。 x と y の値は x と y 軸の軸目盛の(概略の)数を与え、 len はラベルサイズを与える。 現在のところ、len は 移植されていない。

軸ラベル

cex.lab x,y軸ラベル拡大率

x と y軸ラベルを現在値に比べどれだけ拡大するかを指定する拡大率

fg プロットの前景に使われる色

これは軸やプロット周りの箱といった事柄に使われる既定色である

col.axis 軸の注釈に使われる色

col.lab x と y 軸に使われる色

font.lab x と y 軸のラベルに使われるフォント

las 軸ラベルの形式

mgp 軸タイトル、軸ラベルそして軸線のための余白線(mex 単位)

既定値は c(3, 1, 0)

色指定

col 既定のプロット色の指定

> x <- y <- 1:10; z <- matrix(rnorm(100), ncol=10)
> image(x, y, z, col=topo.colors(12))      # 地形図色調を12段階で使

col.axis 軸の注釈に使われる色

col.lab x と y 軸に使われる色

bgプロットの背景に使われる色

fg プロットの前景に使われる色

これは軸やプロット周りの箱といった事柄に使われる既定色である

gamma ガンマ補正

hsv(.., gamma) を見よ

主タイトル関係

col.main 主タイトルをプロットするのに使われる色

tmag 主タイトルの大きさを指定する

プロットの他の注釈テキストとの相対値

cex.main 主タイトルを現在値に比べどれだけ拡大するかを指定する拡大率

font.main 主タイトルのプロットに使われるフォント

副タイトル関係

col.sub 副タイトルをプロットするのに使われる色

cex.sub 副タイトルを現在値に比べどれだけ拡大するかを指定する拡大率

font.sub: 副タイトルのプロットに使われるフォント

作図領域のサイズ、座標、形式

fig デバイスの描画領域中の図領域の(NDC)座標

デバイスの描画領域中の図領域の(NDC)座標を与える c(x1, x2, y1, y2) の形式の数値ベ クトル

fin インチ単位で与えた図領域のサイズ

c(x, y) の形式の数値ベクトル

mai インチ単位で与えた余白サイズ

c(bottom, left, top, right) の形式の数値ベクトル

mar プロットの四隅に置かれる余白のサイズ

c(bottom, left, top, right) の形式の数値ベクトルで、プロットの四隅に置かれる余白のサイズをテキスト行単位(?)で与え る。既定値は c(5, 4, 4, 2) + 0.1

mex プロットの余白の座標を指定するのに使われる文字サイズの拡大ファクタ

plt 作図領域の座標を現在の図領域の割合で与える

形式 c(x1, x2, y1, y2) の形のベクトルで作図領域の座標を現在の図領域の割合で与える

oma テキスト行単位での外側余白

形式 c(bottom, left, top, right) の形のベクトル

omd 外側余白領域

形式 c(x1, x2, y1, y2) の形のベクトルで NDC (=normalized device coordinates) に おける外側余白領域を与える、つまり、 デバイス領域の割合(区間 [0,1] 中)として

omi 外側余白の大きさをインチ単位で与える

形式 c(bottom, left, top, right) の形のベクトルで外側余白の大きさをインチ単位で 与える

pty 用いられる作図領域の型を指定する文字

"s" は正方形の作図領域、"m" は最大の作図領域を生成する

usr 作図領域のユーザー座標の端点値

形式 c(x1, x2, y1, y2) のベクトル

din インチ単位のデバイスの寸法

フォント関係

font テキストに使われるフォントを指定する整数値

font=1 プレーンテキス
font=2 ボールド
font=3 イタリック
font=4 ボールドイタリック

font.axis 軸の注釈に使われるフォント

1 プレーンテキスト
2 ボールド
3 イタリック
4 ボールドイタリック

font.lab x と y 軸のラベルに使われるフォント

1 プレーンテキスト
2 ボールド
3 イタリック
4 ボールドイタリック

font.main 主タイトルのプロットに使われるフォント

1 プレーンテキスト
2 ボールド
3 イタリック
4 ボールドイタリック

font.sub: 副タイトルのプロットに使われるフォント

1 プレーンテキスト
2 ボールド
3 イタリック
4 ボールドイタリック

他の文字列/文字の回転 (par(srt = ..) を用いた) は軸ラベルに影響しないことを注意 せよ

線の種類

lty 線の種類

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" ドット

lwd 線分幅

正の数値で線分の幅を与える。既定値は 1

プロット

pch 点プロットの記号

点のプロットの既定値を与える記号を指定する整数又は単一文字

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 ●(小さい) 

pin プロットの幅と高

現在のプロットのインチ単位の幅と高

bty プロット周辺に描かれる箱のタイプ

プロットの周囲に描かれる箱のタイプを決める文字列。 もし bty が "o", "l", "7", "c ", "u", 又は "]" のどれかであれば、結果の箱は対応する大文字に似たものになる。値 "n" は箱を描く

xpd プロットの作図領域内に刈り込みを指示する論理値

FALSE なら、全てのプロットは作図領域内に刈り込まれる
TRUE なら、全てのプロットは図領域内 に刈り込まれる
NA なら全てのプロットはデバイス領域内に刈り込まれる

テキスト、記号

ps テキストと記号のサイズ

整数; テキストと記号の point 単位のサイズ

srt 度単位での文字列の回転

type 既定のプロットタイプ

文字; 既定のプロットタイプで既定値は "p"、 plot.default(type=...) を見よ

smo (未移植) 円と弧をどの程度滑らかにするかを指示する

mkh pch が整数の時に描かれる記号のインチ単位の高さ

現在は完全に無視される

その他

no.readonly par(.) 呼出しで設定可能なパラメータ

論理値; もし TRUE で他の引数がなければ、以降の par(.) 呼出で設定可能なパラメータ だけが返される

R.O. (読みだし専用、変更不可)パラメータ

ask

論理値。もし TRUE なら、ユーザーは新しい図を描く前に何かキー入力を促される 一連の画像出力が流れさるのを防ぐのに有効

par(ask=TRUE)  #  次の画像出力前に確認を求められる
par(ask=FALSE) # 元に戻

mfcol, mfrow 引き続く図を列主導か行主導で描く

c(nr, nc) の形式のベクトル。 引き続く図はデバイス上にそれぞれ 列主導 (mfcol) 又 は 行主導 (mfrow) の nr-by-nc 配列として描かれる。 別法 layout(..) と split.scre en(..) を考慮しよ

mfcol=c(2,2) # 作図領域を 2x2 に4分割し、列主導で順に作図

mfg 図の配列中のどの図を次に描くか指定

c(i, j) の形式のベクトルで、i と j は図の配列中のどの図を次に描くか(設定時なら) 、 描かれているか(問い合わせ時なら)を指示する。配列は既に mfcol か mfrow で設定 されている必要がある。 S との互換性のために、形式 c(i, j, nr, nc) も可能で で nr と nc は現在の行数と列数で無ければならない。ミスマッチは警告がでるが無視 れるであろう

new 上書きの指定

論理値、既定値は FALSE。もし TRUE に設定すれば、次の高水準プロット命令 (実際は plot.new(.)) は、描画の前に現在のフレームを 消去せず、 あたかもそれが新しいデバイ スであるかのように扱う

new=TRUE 直前のプロットに次のプロットを上描き

err (未実装)

(R はプロット範囲の外の点をプロットしなくても何も 警告しない。) 何種類かの程度の エラー警告が望ましい


実際例

par() 関数の参考実行例

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) の組合せでグラフに沿った辺を結ぶ
  }

プロットの x 軸ラベルを45度回転

> 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()

行列を画像と考え 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段階で使用

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16