Rで作図


このページでは、Rでの作図方法について掲載します。データハンドリングともかぶるところがあるかも。


更新履歴:とりあえず移転
2011年2月13日からのアクセス数: -

R でのグラフの作り方は、(一つの画面に何枚の図を描くかの指定)→ 高水準作図→ 低水準作図という順番に行います。

よく使う作図関数

  • hist(): ヒストグラム。一変量の分布の形を見るのに使う。
> d <- read.csv("data.csv")
> hist(d$omosa) #omosaのヒストグラムが表示される。
  • boxplot(): 箱ひげ図。カテゴリーごとの一変量の分布を見るのに使う。カテゴリーは何層にも階層化できる。
> boxplot(ha ~ syori, d)
> #(描画する値 ~ カテゴリー, データフレーム名)

#二重カテゴリーでもできる例を示す
> d$CO2 <- rep(c("A", "B"), 112)
> boxplot(ha ~ syori + CO2, d)
  • plot(): 散布図。二変数の関係を見るのに使う。
> plot(ha ~ ne, d)
#カテゴリーごとに色やシンボルを変える
> plot(ha ~ ne, pch=as.numeric(syori),
+      col=as.numeric(syori), d)
#pchはシンボルを数字で指定、colは数字や色名で色を指定。
#数字と指定できるシンボル、色の対応を見るためには、
> library(Hmisc)
> show.pch() #warnings()が出ますが無視していいです
> show.col()


#事前に色を指定しておくことも可能
#カテゴリーがアルファベット順に処理されることを利用。
> iro <- c("black", "red", "blue")
> plot(miki ~ omosa, xlim=c(0, 7), ylim=c(0, 2),
+                    pch=as.numeric(d$syori)-1,
+                    col=iro[as.numeric(d$syori)], d)
#iro[*] とすると、iro の*番目に入れた色が使われます。
#as.numeric() で各カテゴリーを数字化して指定。

  • xyplot(): カテゴリー別の散布図。library(lattice)に収録。
> library(lattice)
> xyplot(ha ~ ne | syori, d)
> #(formula | カテゴリー名, データフレーム名)
> xyplot(ha ~ ne | syori + CO2, d)
> #当然カテゴリーは階層化できる。
  • pairs(): データフレーム全ての列の組み合わせの散布図。
> d <- read.csv("data.csv")
> pairs(d)
#この場合も色やシンボルをカテゴリーごとにすることができる。
> pairs(d, pch=as.numeric(d$syori),
+       col=as.numeric(d$syori))

作った図の保存の仕方

  • ゐんどーづの場合:作った図の上で右クリックして、ビットマップにコピーを選び、コピーする。そして、ペイントなどに貼り付けて、ファイルとして保存する。
  • コマンドラインから指示する場合:dev.copy()を使う。
PDFファイルとして出力する場合。
#作図する
> dev.copy(pdf, file="好きなファイルネーム.pdf")
> dev.off() #作図後すぐに行うのがコツ
PNGファイル(GIFとほぼ同等。ただしより高機能)
#作図する
> dev.copy(png, file="好きなファイルネーム.png",
+          width=500, height=500)
  #widthとheightは適当に。
> dev.off() #作図後すぐに行うのがコツ

ちなみに、作った図のフォントのタイプを変えたい場合、斜体か、太字か、ゴシックかぐらいは作図のときに指定できるが、もう少し細かい指定は、
#作図する
> dev.copy(pdf, file="好きなファイルネーム.pdf",
+ family="Times")
> dev.off()
というように、family=""の中に指定をすると変更できる。ちなみに、これはPDFファイルの場合のみ有効な指定らしい。

また、PDFでは特に明示しない場合、縦横比が1:1の図が生成されるが、これを変えたい場合は縦と横の相対的な長さの比率をwidthとheightで与えてやる。
#作図する
> dev.copy(pdf, file="好きなファイルネーム.pdf",
+          family="Times", width=10, height=5)
> dev.off()
最終更新:2011年02月13日 13:26