山羊の午後

研究関係の備忘録。

グラフィックパラメータいろいろ


 Rは図の調整は死ぬほど面倒ですが、その分、自由度は高いです。どんなグラフを描きたいか決めて、一度スクリプトを書いて保存してしまえばあとは楽、なはず。
 調整したい、すべき項目が、描画ウィンドウ(枠、dev()で指定)なのか、図の要素(par()かplot()などのパラメータで指定)なのか、図の付属品(legend()、title()、など)なのかを把握するのが大事です。


par(): グラフィックパラメータの指定

  • 現在のグラフィックウィンドウにパラメータを指定する。また、多くのパラメータはplot()などのグラフ関数内でも指定できる。
  • たいていの項目はpar()のhelpで解説されているので、知りたいことがあったらまずは目を通してみましょう。


描画ウィンドウ (Graphic Device)

dev.new()
新規の描画ウィンドウをつくる。サイズはwidth=5, height=5で指定(単位はinches 1 = 2.54cm, 1.9685 inches = 5 cm)。
dev.size()
現在のウィンドウのサイズを調べる。
dev.list()
現在ある描画ウィンドウ一覧をだす。
dev.set(which= ウィンドウの番号)
描画するウィンドウ(active device)を指定する。

 指定しない限り、グラフは現在のアクティブウィンドウに上書きされます。
 上書きしたくない場合は、dev.new()で新しいウィンドウを作ってからグラフ関数を呼び出します。複数ウィンドウがあるとき、次に描画するグラフは、最も新しいウィンドウ(デバイスナンバーが大きいもの)に上書きされます。

x=c(1,2,3,4,5)
y=c(2,1,3,2,3)
z=c(3,1,3,2,1)

plot(x,y)
dev.new()  #同じ位置に重なって出る

plot(z,y)
a<-dev.list()
a
dev.set(a[1])
abline(lm(y~x))

dev.set(3)
abline(lm(y~z))

描画ウィンドウ内を分割する

par(mfcol=c(列数,行数))
列数×行数に分割する。左上から下方向に順に領域が使用される。
par(mfrow=c(列数,行数))
列数×行数に分割する。左上から横方向に順に領域が使用される。
  • グラフを並べたい順序でどちらか選ぶ。領域は均等に分割される。
  • 枠の数よりも多いグラフが入力されると、最初の枠に戻って描画される。他の枠がリセットされるので、枠の数とグラフの数を合わせておく。
  • 分割した特定の領域だけにグラフを描きたい場合や、任意の大きさに領域を区切りたい場合:layout()やsplit.screen()を使う。
dev.new()
par(mfcol=c(2,2))
for(n in 1:4){plot(1,1,pch=as.character(n))}
#1から4番目の領域に順番にグラフが描かれる。
#5番目のグラフを指定すると1に戻って描かれる。
#(他の枠はリセットされる)

dev.new()
par(mfrow=c(2,3))
for(n in 1:6){plot(1,1,pch=as.character(n))}

dev.set(2)
abline(h=1)
#描き込まれるのは、一つ目のウィンドウの最後の枠

dev.set(3)
plot(1,1,pch="7")
#描き込まれるのは、ウィンドウ3の1番目の枠。
#(他の枠はリセットされる)

図を重ねて書く

par(new=T)
Active deviceにあるグラフに重ね描きを許可する。二つの目のグラフの軸は調整されず、ただ上に重ねられるので、x,y軸の範囲をあらかじめ、xlim=c(),ylim=c()で揃えて指定しておく。
hist(add=T)
描画関数の中には、Add=Tで既に描かれたx,y軸を利用して図を追加して書くことを指定できるものがある。例: hist(), matplot() *1



x軸、y軸

axes()
軸を追加する。side= 1下、2左、3上、4右。at=c(目盛りの場所)。
  • パラメータlabels=T/Fでラベルの有無、labels=c(ラベルの値)で atと異なるラベルを表示。
  • axes()はグラフィックウィンドウ内に設定されている軸を使って線を引くので、軸が設定されていないグラフには設定されていないと
    • *軸の範囲指定
  • 軸を描かない
  • 軸ラベル
  • 軸の0を交差させる(原点の編集): par(xaxs="i", yaxs="i")


マーカー

pch = 0~25
プリセットされた記号を指定。良く使うものは下記。
番号 1 0 2 5 3
×
番号 16 15 17 18 4

文字をマーカーに指定する

pch = "-"
指定した1文字がマーカーになる。複数文字は指定できない。

任意の場所にマーカーを描く

points(x, y, pch=1)
座標(x, y)にマーカーを描く。複数描く場合は、x,yそれぞれにベクトルc()を指定する。




線の種類

任意の線を引く

線の太さ



塗り

色の指定

斜線で塗る


文字のパラメータ

cex = 1
文字の大きさを指定。描画ウィンドウと相対的に決まる。2で二倍サイズ。
ps = 10
文字の大きさをpoint単位で指定。
font= 番号
スタイルを1-4で指定。1標準、2太字、3斜体、4太字斜体。
adj = 数値
文字の揃え位置を指定。0左、0.5中央、1右。c(x, y)で任意のx軸、y軸方向を指定。

タイトル

title(main="title")
メインタイトル(グラフ上)を書く。sub=""でサブタイトル(グラフ下)を書く。xlab,ylabでx,y軸名を書く。

任意の文字を書き込む

text(座標x, 座標y, "text")
グラフの軸内に文字を書く。
mtext("text",side=1~4)
軸の外側に文字を書く。side=1下、2左、3上、4右



凡例 legend(x, y, legend=c(), 描画パラメータ)

  • legendに群名を指定する。各群の描画パラメータと順番が一致することに気をつける。

位置

予約語で指定:相対的に場所を決めてくれるので、便利。
"topleft" "top" "topright"
中央 "left" "center" "right"
"bottomleft" "bottom" "bottomright"
座標で指定: x座標, y座標を指定する。c()でなく、x=X, y=Yと入力する。
  • 凡例の左上角が指定座標になる。
  • 凡例表示のサイズは描画ウィンドウのサイズから相対的に決まるので、座標を固定する場合、注意が必要。
  • グラフの枠外に凡例を描く場合、先に枠外の余白を定義してから、そこに描く指定をする。*2
    • par(oma=c(下, 左, 上, 右)):余白のサイズを指定
    • par(xpd=T):枠外への描画を許可。座標指定でx, y軸の延長線上で枠外を指定できるようになる。(例えばマイナス値)
凡例を2列以上で表示する
  • ncol= 2 :凡例数を指定列数で分割して順に表示する。
  • horiz = T:凡例を列方向に並べる。ncolに優先する。

凡例記号の塗り

  • fill =c(色指定):塗りつぶしが表示される。斜線での塗りつぶし(angle+density)は上手く反映されない。

凡例記号の線

*1:ただし plot() は使えない

*2:一般化しづらいのでお薦めしない