はじめに
以下記事にて二次元配列をpersp関数で可視化する流れを記載しました。
一方で違う見せ方としてscatterplot3d関数で可視化することも可能です。
本記事ではperspに関する記事で利用したアメリカの航空会社から提供されている1949年から12年間の国際線旅客数の月毎の合計AirPassengers
を利用して点群として可視化します。
scatterplot3d用にデータを3次元に変換する
matrixを用いてデータを一列に格納します。
> matrix(AirPassengers) [,1] [1,] 112 [2,] 118 [3,] 132 [4,] 129 [5,] 121 ... [140,] 606 [141,] 508 [142,] 461 [143,] 390 [144,] 432
これを3次元データに格納すべくループ処理を回します。
for(i in 1:12){ for(j in 1:12){ if(i==1 && j==1){ air <- c(i,j,airpass[(i-1)*12+j]) } else{ air <- rbind(air,c(i,j,airpass[(i-1)*12+j])) } } }
3次元配列airの中身を確認すると確かに3次元です。
> head(air) [,1] [,2] [,3] air 1 1 112 1 2 118 1 3 132 1 4 129 1 5 121 1 6 135
データを描画する
描画コマンドを押下すれば表示されます。
scatterplot3d(air,xlab="",ylab="",zlab="",pch =20,type="p",zlim=c(0,max(airpass)))
色付け描画
さらにscatterplot3dの特徴である任意の点に色をつけれることを試します。
Airpassangersの平均値より大きい点はピンク、小さい点は茶色にしてみます。
> mean(AirPassengers) [1] 280.2986
値を格納する際に条件分岐を追加し、色情報を4列目に格納します。
if(airpass[(i-1)*12+j]>mean(airpass)){ air <- rbind(air,c(i,j,airpass[(i-1)*12+j],"#ff7fbf")) } else{ air <- rbind(air,c(i,j,airpass[(i-1)*12+j],"#6c3524")) }
確かに4次元情報として格納されています。
> head(air) [,1] [,2] [,3] [,4] air "1" "1" "112" "#6c3524" "1" "2" "118" "#6c3524" "1" "3" "132" "#6c3524" "1" "4" "129" "#6c3524" "1" "5" "121" "#6c3524" "1" "6" "135" "#6c3524"
描画する際にデータ部分air[,1:3]
と色部分air[,4]
を意識して描画すれば
scatterplot3d(air[,1:3],color=air[,4],xlab="",ylab="",zlab="",pch =20,type="p",zlim=c(0,max(airpass)))
以下となります。
終わりに
二次元配列を可視化する手法は多々ありますが、今回は3次元の点群としてプロットしてました。
個人的には値が少ない場合はperspの方が見やすい気がしますが、場合によっては力を発揮する可視化方法なので覚えておくとどこかで役立つと思います。