R

R을 이용한 3차원 PCA plot 그리기

hongiiv 2009. 6. 25. 15:58
반응형
3차원의 scatter plot을 그리기

주성분분석(PCA)에서는 1,2주성분에 대해서 각각 x,y의 2차원상에서 plot을 그려서 보여준다. 그런데 어느 논문에서 각 개체의 1부터 7까지 주성분을 모두([1,2주성분],[3,4주성분],[5,6주성분],[7,8주성분] - 총 4개의 그래프를 죄다 보여주는)보여주는 것을 보고는 저럴 필요가지 있을까라는 생각이 들긴 했지만, 그렇다면 개체의 1,2,3 주성분(x,y,z축으로)을 3차원으로 보여주는 것도 괜찮을 것 같다는 생각이 들었다.

우선 R의 rgl패키지의 plot3d()를 이용할것이므로 rgl 패키지를 설치한다.

>library(rgl)
>data<-read.table("point2.dat",header=TRUE)
>p1=prcomp(data,scale=TRUE)
>p2<-predict(p1)
>plot3d(p2[,1:3])

또는 prcomp() 대신 princomp()를 이용할 경우에는

>p3<-princomp(data,scale=TRUE)
>plot3d(p3$scores[,1:3])

이렇게 그려진 plot은 다음과 같이 OpenGL을 이용하여 그려지게 되고, 마우스 줌과 회전이 가능해진다. 마우스로 적당한 포즈?를 취한 후에는 snapshot()을 이용해서 그림 파일로 저장이 가능하다.

>rgl.snapshot("3dplot.png")

rgl plot3d

그림 파일이 아닌 동영상(움직이는 gif)로 저장하고 싶다면 ImageMagick을 설치한 후 movie3d()를 실행하면 지정된 tmp 폴더에 movie.gif 라는 움직이는 동영상이 저장된다.

>movie3d(spin3d(),duration=20,convert=TRUE)


이건 신모박사님의 데이터를 잠깐 빌려서 그려본 3D PCA plot  ^^;;
Picture 4

반응형