> 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() 함수와 각종 그래프 옵션들에 대해 자세히 알아보려면 ↓↓↓
> 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차원산점도>
'R > Graph' 카테고리의 다른 글
R 이산변수 시각화 - 모자이크 플롯 mosaicplot (0) | 2021.03.21 |
---|---|
R 이산변수 시각화 - 파이차트 pie (0) | 2021.03.20 |
R 이산변수 시각화 - 점차트 dotchart (0) | 2021.03.18 |
R 이산변수 시각화 - 막대그래프 barplot (0) | 2021.03.17 |
R 산점도 Scatter - plot/그래프 옵션 (0) | 2021.03.12 |
댓글