본문 바로가기
R/Graph

R 산점도 Scatter - 산점도행렬/3차원산점도

by 통계열등생 2021. 3. 15.
반응형
> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

iris 데이터를 사용해 산점도 행렬과 3차원 산점도 그래프를 설명하려 한다.

 

 

 

 

 

 ◎ 산점도 행렬

 

pairs( x, ... )
pairs( formula, data = NULL, ... )

산점도 행렬은 다변량 데이터에서 변수 간의 산점도들을 그린 그래프이다. 변수들 간의 상관관계 등의 특징을 알아보는데 유용하다.

pairs() 함수의 ... 인수 부분에는 plot() 함수와 같은 그래프 옵션들을 지정할 수 있다.

 

 

 

※ 산점도를 그리는 plot() 함수와 각종 그래프 옵션들에 대해 자세히 알아보려면 ↓

small22.tistory.com/31

 

R 산점도 Scatter - plot/그래프 옵션

산점도(Scatter Plot)는 주어진 데이터를 점으로 표시해 시각화한 그래프이다. 데이터의 분포를 한눈에 살펴볼 수 있어 유용하다.  ◎ plot() 함수 plot(x, y, ...) R에서 산점도는 plot() 함수로 그린다. p

small22.tistory.com

 

 

 

> pairs(iris[-5])  
> # pairs(iris[1:4]) 와 결과 같음
> # plot(iris[5]) 와 결과 같음
> # plot(iris[1:4]) 와 결과 같음

iris 데이터에서 5번째 열 데이터를 제외한 4개의 변수로 산점도 행렬을 그린 그래프이다.

다른 변수들에 비해 Petal.Length 변수와 Petal.Width 변수가 양의 상관관계를 가짐을 볼 수 있다.

 

> pairs(iris[1:4], pch=21, bg=c("red","green3","blue")[unclass(iris$Species)])

bg 옵션을 사용해 붓꽃의 종류 별로 점의 채우기색상을 다르게 지정해준 산점도 행렬이다. bg 옵션을 쓰려면 pch 옵션을 21~25 사이의 값으로 지정해줘야 한다.

 

> pairs( ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width, 
+       data=iris, pch=c(1,2,3)[iris$Species])

포뮬라 형식을 사용해 그린 산점도 행렬이다.

붓꽃의 종류 별로 setosa는 원형, versicolor는 삼각형, virginica는 십자가 모양으로 pch 옵션을 지정해주었다.

 

> pairs(iris[1:50,1:4])
> # pairs(iris[iris$Species=='setosa',1:4]) 와 결과 같음

붓꽃의 종류인 setosa 데이터만 따로 떼어서 산점도 행렬을 그린 그래프이다.

 

 

 

 

 

 ◎ 3차원 산점도

 

  • scatterplot3d
> install.packages('scatterplot3d')
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/small22/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
URL 'https://cran.rstudio.com/bin/windows/contrib/4.0/scatterplot3d_0.3-41.zip'을 시도합니다
Content type 'application/zip' length 338092 bytes (330 KB)
downloaded 330 KB

package ‘scatterplot3d’ successfully unpacked and MD5 sums checked

The downloaded binary packages are in
	C:\Users\Public\Documents\ESTsoft\CreatorTemp\RtmpMxGvXs\downloaded_packages
> library(scatterplot3d)

먼저 3차원 산점도를 그릴 수 있는 scatterplot3d 패키지를 설치하고, 사용할 수 있도록 라이브러리에 올려준다.

 

> # 꽃의 종류별 분류 
> setosa = iris[iris$Species == 'setosa',]
> versicolor = iris[iris$Species == 'versicolor',]
> virginica = iris[iris$Species == 'virginica',]

iris 데이터를 붓꽃의 종류 별로 3개의 변수에 각각 저장한다. 이는 원하는 점의 모양을 그래프에 그릴 때 사용할 것이다. 

 

> # scatterplot3d( 밑변, 오른쪽변, 왼쪽변, ... ) 
> d3 = scatterplot3d(iris$Petal.Length, iris$Sepal.Length, iris$Sepal.Width, 
+                    type='n')

scatterplot3d() 함수에 밑변, 오른쪽변, 왼쪽변 순으로 원하는 데이터 지정해준다. 축의 순서대로 말하자면 x축, z축, y축 순서이니 헷갈리지 않게 주의한다.

그래프의 점들이 비어있는 이유는 type 옵션을 'n'으로 지정하였기 때문이다. 

 

> str(d3)
List of 6
 $ xyz.convert:function (x, y = NULL, z = NULL)  
 $ points3d   :function (x, y = NULL, z = NULL, type = "p", ...)  
 $ plane3d    :function (Intercept, x.coef = NULL, y.coef = NULL, lty = "dashed", 
    lty.box = NULL, draw_lines = TRUE, draw_polygon = FALSE, 
    polygon_args = list(border = NA, col = rgb(0, 0, 0, 0.2)), ...)  
 $ box3d      :function (...)  
 $ contour3d  :function (f, x.count = 10, y.count = 10, type = "l", 
    lty = "24", x.resolution = 50, y.resolution = 50, ...)  
 $ par.mar    :List of 1
  ..$ mar: num [1:4] 5.1 3.1 4.1 3.1

scatterplot3d() 함수를 객체에 저장해서 자료의 구조를 살펴보면 객체 안에 points3d 함수가 들어 있다. 이 함수를 사용해 비어있는 그래프에 점을 채워줄 것이다.

 

> d3$points3d(setosa$Petal.Length, setosa$Sepal.Length,
+             setosa$Sepal.Width, bg='orange', pch=21, cex=2)
> 
> d3$points3d(versicolor$Petal.Length, versicolor$Sepal.Length,
+             versicolor$Sepal.Width, bg='blue', pch=23, cex=2)
> 
> d3$points3d(virginica$Petal.Length, virginica$Sepal.Length,
+             virginica$Sepal.Width, bg='green', pch=25, cex=2)

이전에 iris 데이터를 붓꽃의 종류 별로 3개의 변수에 각각 저장하였다. 여기서 3개의 데이터 별로 점의 채우기 색상과 점의 종류를 다르게 하여 빈 그래프에 점을 찍어줌으로써 3차원 산점도가 완성되었다.

 

 

 

  • plot3d
> install.packages('rgl')
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Installing package into ‘C:/Users/small22/Documents/R/win-library/4.0’
(as ‘lib’ is unspecified)
also installing the dependencies ‘fs’, ‘rappdirs’, ‘BH’, ‘sass’, ‘jquerylib’, ‘httpuv’, ‘xtable’, ‘sourcetools’, ‘later’, ‘promises’, ‘fastmap’, ‘commonmark’, ‘bslib’, ‘cachem’, ‘lazyeval’, ‘miniUI’, ‘webshot’, ‘shiny’, ‘crosstalk’, ‘manipulateWidget’

...

> library(rgl)

두번째로 3차원 산점도를 그릴 수 있는 함수를 가지고 있는 rgl 패키지를 설치해주고, 사용할 수 있도록 라이브러리에 올려주었다.

 

> plot3d(iris[,1:3], size=7,
+        col=c(rep('red',50),rep('blue',50),rep('green',50)))

plot3d() 함수는 점의 크기를 지정하는 옵션이 cex가 아닌 size이다.

plot3d() 함수를 사용해 3차원 산점도를 출력하면 프로그램 상에서 그래프가 출력되는 것이 아니라 새로운 창이 뜨며 그래프가 출력된다. 이 새로운 창에서 마우스로 그래프를 드래그해보면 3차원 그래프가 아래의 사진처럼 원하는대로 움직인다는 것이 이 함수의 장점이다.

 

 

 

 

 

 

<R 산점도 Scatter - 산점도행렬/3차원산점도>

반응형

댓글