ぱらぱらめくる『Rグラフィックス』

Rグラフィックス ―Rで思いどおりのグラフを作図するために―

Rグラフィックス ―Rで思いどおりのグラフを作図するために―

  • 目次
    • 0部
      • 1 R作図の紹介
    • I部 Traditionalな作図
      • 2 Traditional作図を素朴に使ってみる
      • 3 Traditional作図のカスタマイズ
    • II部 Gridな作図
      • 4 Trellis作図:latticeパッケージ
      • 5 Grid作図モデル
      • 6 Grid作図オブジェクトのモデル
      • 7 新しい作図関数と作図オブジェクトの開発

1 R作図の紹介 ぱらぱらめくる『Rグラフィックス』

  • 作図の分類
    • 統計作図
      • 一般的な統計グラフを描く
      • 複数の統計グラフを使って1塊の統合グラフを作る(Trellisなど)
    • 自由作図
      • パッケージを使って色々な作図をする
      • 作図関数を自作する
  • 作図のためのRの構成
help(Devices)
    • 作図システム(作図のための基本関数群、graphics、gridの2パッケージ)
help(graphics)
help(grid)
    • 作図パッケージ(いわゆる、作図関数提供パッケージ)
      • グラフ系はgraphicsに乗っているものがほとんど
      • 自由作図はgridに乗せる方が「やりやすい(たぶん、座標の扱いとかに優れている?)」
  • 作図関数を2分類
    • 高水準関数(それだけで、グラフとして完成品なものを描く)
    • 低水準関数(できているグラフに書き込む)
      • 作図システム(graphics,grid)はそれぞれ独自の低水準関数群を持つ
        • だから、2つは使い分ける必要がある、高水準関数とそれを持つパッケージは、作図システムとしてどちらか片方に乗ることになる

2 Traditionalな関数を素朴に使ってみる ぱらぱらめくる『Rグラフィックス』

  • 基本
    • 高水準関数で描いて
    • 必要に応じて低水準関数で修飾する
  • 総称関数という仕組み
    • plot(x),plot(y),...というように、x,yにはベクトルが入ったり、行列が入ったり、何かしらのパッケージが独自に定義したオブジェクトが入ったりするけれど、いずれの第一引数についてもplot()が機能するのは、plot.x,plot.yというように、第一引数特異的な関数が定義されていて、plot(y)とされたら、plot.y()が動くようなルールになっているから
    • このような、一つの関数plot()が複数の対称に対応するときそれをgeneric functionという(そうだ)
  • 引数は大きく2つに分かれる
    • 共通する引数(標準的引数)
    • 関数特異的引数

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

4 Trellis作図:latticeパッケージ ぱらぱらめくる『Rグラフィックス』

  • Gridシステムに乗ったTrellis作図をするパッケージlatticeは、一通りの高水準関数をそろえ、低水準関数とともに作図できる
  • 作図条件を把持したオブジェクトを作成し、それを「図示」ことで作図作業を完成する
  • オブジェクトが格納した作図条件を変更することで、図を変えることができる
library(lattice)
# オブジェクトを作って
tplot<-xyplot(lat ~ long, data=quakes, pch=".")
# オブジェクトから図を作る
print(tplot)
  • latticeはtraditionalに対応する関数を持っている(対応は完全ではないが)
lattice traditional
barchart() barplot()
bwplot() boxplot()
densityplot() NA
dotplot() dotchart()
histogram() hist()
qqmath() qqnorm()
stripplot() stripchart()
qq() qqplot()
xyplot() plot()
levelplot() image()
contourplot() contour()
cloud() NA
wireframe() persp()
splom() pairs()
parallel() NA
  • gridベースの作図はlatticeパッケージとggplot2パッケージの2つがある。その比較はこちら

5 Grid作図モデル 6 Grid作図オブジェクトのモデル 7 新しい作図関数と作図オブジェクトの開発 ぱらぱらめくる『Rグラフィックス』

  • gridでは、カンバスに描画物を重ね塗りしていくイメージ
  • 座標の管理をするとともに、カンバス上に部分領域を作り、その部分領域の上には、別の座標を載せることができる
  • SVGでの描図と基本は同じ
  • オブジェクトを組み合わせて統合的な描画物を作ることが適当だが、そのためには階層的な関係を持たせると便利であって、そのための仕組みもある
  • 新規の作図関数・パッケージをgrid上で、その仕組みに従って作っていくことは(十分に)可能