Rの基本グラフ描画--barplot( ), plot( ), pie( ), hist( )

Rのグラフィック能力はきわめて高い。 詳細は

『Rグラフィックス』、Paul Murrell(久保拓弥訳)、共立出版(2009)

に詳しい。

ここではRに組み込みのデータを使って、ごく簡単なグラフ描画を紹介する。

棒グラフ

データ VADeaths は、齢50〜74を5段階にわけてその死亡率を田舎(rural)、都会(urban)の男(male)女(female)別に与えたデータである。
> data(VADeaths)
> VADeaths
      Rural Male Rural Female Urban Male Urban Female
50-54       11.7          8.7       15.4          8.4
55-59       18.1         11.7       24.3         13.6
60-64       26.9         20.3       37.0         19.3
65-69       41.0         30.9       54.6         35.1
70-74       66.0         54.3       71.1         50.0
一列目のRural Maleデータの棒グラフは次で得られる。
> barplot(VADeaths[,1], main = "Death of Rural Male")

各列の割合を積み上げて、棒グラフとして描画するには次ようにする。 ただし、第1行のデータを棒の最も下の方に、最終行のデータが棒の最上部に配置されることに注意。

> barplot(VADeaths, main = "Deaths", legend = rownames(VADeaths))

barplotのオプション beside は棒グラフを横に並べるかどうかを指定する(デフォルトは FALSE で横に並べない)。 次の例は、データ VADeaths の各行を積み上げずに横に並べて、各列を棒グラフとして描画する。

> barplot(VADeaths, beside = TRUE, main = "Deaths", legend = rownames(VADeaths))

散布図と折れ線グラフ

データ pressure はラベル名 temperature と pressure の二列だけからなる19行のデータである。
> pressure
   temperature pressure
1            0   0.0002
2           20   0.0012
3           40   0.0060
4           60   0.0300
....
....
17         320 376.0000
18         340 558.0000
19         360 806.0000
各行のペア値 (x,y) の散布図は plot( ) を使って次のようになる。
> plot(pressure)
> text(150, 600, 
+      "Pressure (mm Hg)\nversus\nTemperature (Celsius)")

ここで、plot(pressure)

> plot(pressure$temperature, pressure$pressure)
または
> plot(pressure ~ temperature, data = pressure)
で置き換えることができる。

隣り合うペア値 (x_i,y_i)を線でつないだ折れ線グラフは、オプション type に"l"(Lの小文字であり、数字oneではない)を指定する。

> plot(pressure ~ temperature, data = pressure, type="l")

type に加えて、さらに、lwd(Line WiDth) で線の太さ、col で線の色、lty で線種を指定できる。

> plot(pressure ~ temperature, data = pressure, type="l", lwd=3)
> plot(pressure ~ temperature, data = pressure, type="l", col="red")
> plot(pressure ~ temperature, data = pressure, type="l", lty="dashed")

円グラフ(パイチャート)

次のようにしてデータ pie.sales を用意しておく。
> pie.sales <- c(0.12, 0.3, 0.26, 0.16, 0.04, 0.12)
> names(pie.sales) <- c("Blueberry", "Cherry",
+     "Apple", "Boston Cream", "Other", "Vanilla Cream")
> str(pie.sales)
 Named num [1:6] 0.12 0.3 0.26 0.16 0.04 0.12
 - attr(*, "names")= chr [1:6] "Blueberry" "Cherry" "Apple" "Boston Cream" ...

円グラフは次で得られる。

> pie(pie.sales, main = "Pie chart of Sales")

データの並びを時計回りにするときにはオプション clockwise を指定する。

> pie(pie.sales, clockwise = TRUE, main = "Pie chart of Sales")

ヒストグラム

データセットを階級幅で区切ってまとめて棒グラフで表現したものがヒストグラム(histogram)である。 ヒストグラムはデータセットの分布を鳥瞰するのに都合がいい。

Rのデータ iris は、アヤメの種類[Species](setosa、versicolaor、virginica)、顎片の長さ[Sepal.Length]と幅[Sepal.Width]、花弁の長さ[Petal.Length]と幅[Petal.Length]の5つのラベルに付いての150サンプルデータである(150行 x 5列)。

> data(iris)
> str(iris)
'data.frame':	150 obs. of  5 variables:
 $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
 $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
 $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
 $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
 $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

全irisデータにおける Sepal Lenghのヒストグラムは次のようになる。

> hist(iris$Sepal.Length, xlab = "Sepal Length", main = "Histgram of Iris")

頻度を明示するオプション label を使うと、各棒に頻度が付加される。

> hist(iris$Sepal.Length, label = TRUE, xlab = "Sepal Length", main = "Histgram of Iris")

種 SetosaについてのSepal.Lengthのヒストグラムは次で得られる。

> hist(iris[iris$Species=="setosa",]$Sepal.Length, xlab = "Sepal Length", main = "Histgram of Iris Setosa data")

オプション breaks でヒストグラムの階級幅(区切り幅)を明示的に指定することができる。 次の例は、上の場合で、自動的な階級幅に代わって 3,4,5,6,7 と指定した場合のヒストグラムである。

> hist(iris[iris$Species=="setosa",]$Sepal.Length, breaks = 3:7, 
+    xlab = "Sepal Length", main = "Histgram of Iris Setosa data")

画像ファイルへの書き出し

デバイス関数を使って、Rによる描画をさまざまな書式で書き出すことができる。 次の例は、PNG形式でのファイル出力する例である。 ファイルデバイス関数の一つである png() 関数で書きだすファイル名を指定して、描画処理(この場合は1行だけ)を行った後で、dev.off() で必ずデバイスを閉じるようにする。
> png(file="seiseki-eng.png")
> boxplot(Seiseki$Eng, ylim = c(0, 100), main = "English")
> dev.off()
ファイルデバイス関数には次のようなものがある。
postscript( )Adobe PostScriptファイル
pdf( )Adobe PDFファイル
pictex( )LaTeX PicTeXファイル
png( )PNGファイル
jpeg( )JPEGファイル