3 Trasitional 作図のカスタマイズ ぱらぱらめくる『Rグラフィックス』

  • 基本、少し改変
    • 高水準関数+低水準関数で作る
    • 低水準関数のみで作る
  • この章の構成
    • 3.1 低水準関数で適切に描くための基礎
    • 3.2 作図を構成する概念とそれを用いた体裁の指定
    • 3.3 複数の図の配置
    • 3.4 描き加える
  • 3.1 低水準関数で適切に描くための基礎
    • グラフ領域
      • 外側から、Outer領域、figure領域、plot領域からなる
    • 座標系
      • 左下を原点に横にx、縦にy
    • 作図状態情報
      • バイスごとに作図する。その作図の状態・条件はデバイスごとに指定・保存している
      • par()によって状態を表示でき、par()を使って、状態・条件を変更することができる
x<-runif(1000)
plot(x)
# 状態・条件のうち、col(色)とpch(点の形状)を表示
par(c("col","pch"))
> x<-runif(1000)
> plot(x)
> par(c("col","pch"))
$col
[1] "black"

$pch
[1] 1

# colをredに変更
par(col="red")
plot(x)
# 状態・条件のうち、col(色)とpch(点の形状)を表示
par(c("col","pch"))

> par(col="red")
> plot(x)
> par(c("col","pch"))
$col
[1] "red"

$pch
[1] 1
# pchを15に変更
par(pch=15)
plot(x)
# 状態・条件のうち、col(色)とpch(点の形状)を表示
par(c("col","pch"))
> par(pch=15)
> plot(x)
> par(c("col","pch"))
$col
[1] "red"

$pch
[1] 15

  • 3.2 作図を構成する概念とそれを用いた体裁の指定
    • 色の指定、3部分
      • col : plot 領域に描かれるもの(シンボル・線・テキストなど)の色の指定
      • fg : グラフの軸・境界線の色の指定
      • bg : 背景色の指定
    • 色の指定法
      • colors()による名称指定
      • rgb()による3原色指定
      • hsv()による色相・彩度・明度指定
    • 透明・半透明
      • 名称指定ではアルファ値指定(0-1)
      • rgb()では、16進x3でRGB、もう一つの16進法1桁分で透過性
      • NA指定は完全透明
    • 色の順序つきセット
example(rainbow)
    • 塗りつぶし
      • density()、angle()関数が四角形・多角形に実施可能
      • 線のタイプ(実線、破線、点線など)
      • 線の太さ
      • 線の末端の継ぎ目の取り扱い
    • テキスト
      • サイズ:ps(絶対サイズ),cex(相対サイズ)
      • フォント:font, family
      • 左右位置:adj
      • 回転:str
    • 作図領域の指定に関すること
    • グラフの移動に関すること
  • 3.3 複数の図の配置
    • par(mfcol=c(n,m))
    • layout()
    • split.screen()
  • 3.4 描き加える
    • どこに加えるか
      • plot領域に加える
        • 座標指定で加える
      • Figure 領域内でplot領域外(マージン)に加える
        • mtext()とlines()のみ
    • 凡例
      • legend()
      • 座標指定で加える
    • 軸を操作する
    • 数式
plot(x)
mtext(expression(sum(x,i==1,100)==sqrt(y)))
demo(plotmath)

  • 重ね描きとかしたくなったら
    • 領域は座標していできるから、それに応じて、適宜座標変換しつつ描く、とか…
    • 基本的には、縦軸・横軸とも[0,1]と考え、プロットしたい値の方をこれに合わせて標準化する
# プロット開始
# デバイスを開くだけ
plot.new()
# 領域に座標を与える
# まだ、何も描かれない
plot.window(c(0,1),c(0,1))
# 四角を置くがまだ描かれない
box()
# 時刻変数を作る
t<-seq(from=1968,to=2012,by=1)
# 時系列変化の変数x,yを作る
# 2つはスケールが違う
x<-runif(length(t))
x<-sort(x)
x<-sort(x)+rnorm(length(x),sd=0.1)
y<-rnorm(length(t),mean=100,sd=30)
# 時刻、x,yのそれぞれを標準化する

# 切りの良い数字が描図領域の端に来るように、最小・最大値を変数ごとに定める
# 変数t は等間隔だったので、簡単に指定する
t.st<-(t-min(t))/(max(t)-min(t))
minX<-floor(min(round(x,1)))
maxX<-ceiling(max(round(x,1))+1)
minY<-floor(min(round(y,1)))
maxY<-ceiling(max(round(y,1)))
x.st<-(x-minX)/(maxX-minX)
y.st<-(y-minY)/(maxY-minY)
# 点を打って
points(t.st,x.st,col=3)
points(t.st,y.st,col=2)
# 線を引く
lines(t.st,x.st,col=4)
lines(t.st,y.st,col=5)
# 軸を与える
# 軸の刻みとその値を与えている
axis(1, seq(from=0,to=1,length=length(t)), t)
axis(2, seq(from=0,to=1,length=11), seq(from=minX,to=maxX,length=11))
axis(4, seq(from=0,to=1,length=11), seq(from=minY,to=maxY,length=11))