[連載]フリーソフトによるデータ解析・マイニング 第5回
Rでのデータの視覚化(2)
6 散布図
散布図は変数間の関係を考察するために、個体を2〜3次元空間に配置したグラフである。
6.1 2次元散布図
2次元散布図というのは、一つの変数を横軸、もう一つの変数を縦軸として2次元平面に個体のデータを配置したグラフを指す。Rで散布図の作成はplotという関数を用いる。例えば、irisデータの第1列を横軸、第3列を縦軸とし、関数plotを用いてコマンド
>plot(iris[,1],iris[,3])
を実行すると、図11のような散布図が作成される。

図11 ラベルなしの散布図 図12 個体番号が付いた散布図
このような散布図はラベルがないので、どの個体がどの位置に配置されているかに関する情報が読み取れない。次のように2行のコマンドを実行すると個体の番号が付けられた図12のような散布図が返される。
>plot(iris[,1],iris[,3],type="n")
>text(iris[,1],iris[,3])
関数plotに用いたtypeは散布図のマークの種類を指定する引数で、type=”n”は散布図のマークを描かない。関数textは散布図のラベルなどを加える関数で、plotの引数type=”n”とtext(x,y)の組み合わせで、データの番号をラベルとして付ける。
データの番号ではなく、好きなラベルを各個体につけることも可能である。好きなラベルを付けるためには、ラベルを表す文字列ベクトルを事前に準備しておくと便利である。
用いたirisデータの第5列はラベルのデータであるが、その表記が長いので、それを用いると散布図が非常に見にくくなる。そこで新たにラベルを作成することにする。ラベルデータの作成は、一つ一つのラベルをキーボードで入力することが最も素朴な方法である。しかし、irisの個体数は150もあり、すべてをキーボードで入力することはやや面倒であるので、repという関数を用いて作成する。repを用いた次のコマンドを実行すると、はじめの50のラベルはS、51から100までのラベルはC、101から150までのラベルはVであるラベルベクトルがiris.labelという名前で作成される。
>iris.label<-rep(c(“S”,”C”,”V”),rep(50,3))
次の2行のコマンドにより作成された散布図を図13に示す。
>plot(iris[,1],iris[,3],type="n")
>text(iris[,1],iris[,3],iris.label)

図13 ラベルが付いた散布図
図13から三種類のアヤメにおける各種類の特徴が読み取られる。花弁の長さ(縦軸)が最も短いのはsetosaで、その次がversicolor、virginicaの順で、花弁の長さでその品種がある程度識別できる。例えば、花弁の長さが2を超えなければその品種はsetosaであるなど。
関数plotの書き式と主な引数及びその機能を表3に示す。
表3 関数plotの書き式と主な引数
plot(x, y, xlim=range(x), ylim=range(y), type="p", main, xlab, ylab……) |
|
x |
横軸のデータ |
y |
縦軸のデータ |
xlim |
横軸の範囲 |
ylim |
縦軸の範囲 |
type |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表3の引数を組み合わせた次のコマンドを実行すると図14のような図が作成される。
>plot(iris[,1],iris[,3],type="p",xlab="Length of Sepal", ylab="Length of Petal",cex=2, col=”red”)
図4はどの点がどの種類であるかを識別することができない。次のようにirisの種類別に色付けすることもできる。次のコマンドを実行すると、図15 のような色が付いた散布図が作成される。
>plot(iris[,1],iris[,3],pch
= 21, cex=2,bg = c(2, 3, 4)[unclass(iris$Species)])
ここの引数pch = 21は、円形マークを色で塗りつぶすこと、bg = c(2, 3, 4)はマークを3種類(赤、緑、青)の色で塗りつぶすこと、[unclass(iris$Species)]は、塗りつぶす色はデータirisの中Species列の品種の順であることの指定である。Irisデータは3種類であるので、個体1〜50のsetosa品種は色コード2の赤色(red)、51〜100のversicolor品種は色コード3の緑色(green)、101〜150のvirginica品種は色コード4の青色(blue)で塗りつぶす。
軸の文字、ラベル、軸の名前の文字サイズを同時にコントロールするのには、plotを実行する前に関数parに引数cexを次のように用いる。
>par(cex=0.8)
引数cexのパラメータ0.8は標準サイズの0.8倍の大きさで文字を表示することを意味する。このパラメータは自由に調整することが可能である。関数parはグラフ画面の設定を行う関数で、数十個の引数がある。その主な引数を表4に示す。
図14 複数の引数を用いた散布図の例 図15 種類ごと着色した散布図
表4 parの書き式と主な引数
|
|
par(cex=,pch=, mfrow=, col=,…… ) |
|
cex= |
文字、あるいはマークのサイズを指定する。初期値は1である。 |
|
pch=n |
数値でマーク(絵記号)を指定。0は□、1は○など図16を参照。 |
|
pch=“文字” |
“”で囲まれた文字を点の変わりにプロットする。 |
|
mfrow=c(m,n) |
一つの画面にm行n列の図を行順に描く、初期値はc(1,1)である。 |
|
mfcol=c(m,n) |
一つの画面にm行n列の図を列順に描く、初期値はc(1,1)である。 |
|
bg= |
マークなどを塗りつぶすのに使用するの色を指定する。 |
|
col= |
軸とマークの色を指定する。色の表記は表1を参照。文字列で色を示す場合は“”で囲むが、数値で示す場合は“”で囲まない。例えば、赤で散布図を作成する場合は、col=“red”、あるいはcol=2。初期値は1(黒)である。 |
|
lty= |
線のタイプを指定する。1は実線、2は点線など |
|
lwd= |
線の太さを指定する。初期値は1。数値が大きくなると線が太くなる。 |
図16に引数pchの数値とマークの対応関係を示す。例えば、pch=1の時は○となる。

図16 引数pchの数値とマークの対応関係
6.2 対散布図(散布図行列)
用いる変数が2以上で、かつ変数がそれほど多くない量的データ場合は、本格的な解析を行う前に、すべての変数を組み合わせた散布図について考察を行うことで、データ間の関連性を視覚的に把握することができる。1つの画面に複数の変数を組み合わせた散布図を対散布図、あるいは散布図行列という。対散布図の作成は、関数pairsを用いる。irisのデータを用いて対散布図の作成について説明する。irisデータの四つの変数を用いた最もシンプルな対散布図は次のコマンドで作成できる。
>pairs(iris[1:4])
このコマンドで作成された散布図では、品種を区別することができない。コマンド
>pairs(iris[1:4], pch = 21, bg = c("red", "green3", "blue")[unclass(iris$Species)])
図17 irisデータの対散布図
で種類ごとに色付けされた対散布図が作成される。pch = 21は円形マーク、bg = c("red", "green3", "blue")は色の指定、[unclass(iris$Species)]は、色付けはirisデータのSpeciesで示された順に行うことを指定している。
7. 3次元グラフ
3つの変数を用いて、3次元空間でデータを配置した3次元散布図の作成について説明する。パッケージを用いると図18に示すような3次元グラフを作成することができる。
図18 3次元グラフのサンプル
パッケージlattice、scatterplot3dには3次元散布図を描く関数が含まれている。
Packageのメニューからlatticeを選択し、[OK]をクリックするか、コンソールからlibrary(lattice)と入力し、[Enter]キーを押すか、いずれかの方法でパッケージlatticeをR読み込む。
latticeを読み込むと3次元散布図作成の関数cloudの作業環境が整ったことになる。その次に必要となるのはデータである。説明の便利のためここでもirisデータを用いる。次のコマンドを実行すると図19のような図が返される。
>library(lattice)
>cloud(iris[,1]~iris[,2]*iris[,3],col=”blue”,pch=19,data = iris)

図19 irisの3次元散布図1
cloudの最も簡潔な書き式はcloud(formula, data)である。formulaはdataのなかのどの変数をどの軸に対応させるかを指定する引数である。その書き式はz ~ x * yである。zは縦軸、x,yは両横軸である。”~”はチルタと呼ぶ。用いるデータの列の名前が付いている場合は、列の名前で次のように指定してもよい。次のコマンドを実行すると図20のような品種別に色分けした散布図が得られる。
>cloud(Sepal.Length
~ Petal.Length * Petal.Width, data = iris, groups = Species)
引数groups は自動的に色付けを行う際に、グループに関するベクトルを指定するのに用いる。図20と同じにするのには上記のコマンドに引数pch=c(16,17,18),col=c(1,2,4)を付け加え、マークの種類と色を指定する必要がある。

図20 irisの3次元散布図2 図21 irisの3次元散布図3
3次元の回転角度は引数screen = list(z =, x=,y = )を用いて調整することが可能である。上記のコマンドに引数screen = list(z = 0, x=10,y =-15 )を付け加えると図21のように回転した3次元散布図が作成される。
>x
<- seq(-5, 5, length=50)
>y <- x
>f <- function(x,y) {r <-
(y^2)-(x^2)}
>z <- outer(x, y, f)
>persp(x, y, z,theta = 60,phi =
25,expand = 0.8,shade=.01,col = "lightblue")
7. 等高線グラフ