R で、3次元の散布図と95%信頼楕円体を一緒に描く方法

R で、いつもの iris のデータを、グループ毎に色を変えて3次元の散布図で描画し、さらに、グループ毎の 95% 信頼楕円体を一緒に描いてみます。
それぞれの軸は、x, y, z は、それぞれ Sepal.Length, Sepal.Width, Petal.Length です。つまる所、はじめの3列です。
rgl パッケージが必要ですので、インストールしておきましょう。
50ずつ、3グループになっているので、色と後半の楕円は、50ずつで処理しています。
for ループを使いましたが、3回に分けてデータを変えて楕円を書いても良いです。

library(rgl)

Colour <- c( rep("red", 50), rep("blue",50), rep("green",50))
# red, setosa; blue, versicolor; green, virginica
hoge3d <- iris
# x, y, z は、それぞれ Sepal.Length, Sepal.Width, Petal.Length
plot3d(hoge3d, size=1, axes=F,type="s", col=Colour) 
grid3d("x")
grid3d("y")
grid3d("z")

# 95% 信頼楕円を書きます。
for (i in 0:2){
group_select <- c(1:50)+50*i
Ellips_Colour <- c("red", "blue", "green")
hoge1<- iris[group_select,1:3]
ellips <- ellipse3d(cov(hoge1),
            centre=c(mean(hoge1[,1]), mean(hoge1[,2]), mean(hoge1[,3])), level = 0.95)
shade3d( ellips , col = Ellips_Colour[i+1], alpha = 0.1, lit = FALSE )
}

3次元図は、保存の際は、2次元のグラフのように pdf で保存はできません。
eps (のちに pdf に変換可能) なら、

rgl.postscript("iris_with_ellipse.eps", fmt="eps" )
グラウザーで表示して、ぐりぐり回すなら、
writeWebGL(width=500, height=550)
などとすると "webGL" というフォルダー内に "index.html" というファイルで保存できます。
html の中身をそのまま貼り付けたのが、2番目の図ですが、回転できなかったらごめんなさい。




B! LINE