산점도(Scatter Plot)는 주어진 데이터를 점으로 표시해 시각화한 그래프이다.
데이터의 분포를 한눈에 살펴볼 수 있어 유용하다.
◎ plot() 함수
plot(x, y, ...) |
R에서 산점도는 plot() 함수로 그린다.
plot( X좌표, Y좌표 )의 형식을 사용하기도 하지만
plot( Y좌표 ~ X1좌표 + X2좌표 + ... )의 포뮬라 형식을 사용하면 여러개의 그래프를 차례대로 출력해준다.(콘솔창에서 엔터<Enter>키를 누르면 그래프를 볼 수 있다.)
> x = runif(15, 1, 100); x
[1] 24.15888 86.42449 80.39122 46.64328 22.62998 70.58812
[7] 29.39419 86.16871 79.72915 19.48776 32.10229 70.69019
[13] 84.15381 66.11607 24.38294
> y = runif(15, 5, 120); y
[1] 86.60832 21.94369 40.35969 104.71062 48.46121 32.03513
[7] 45.24142 118.11248 14.95524 76.72485 62.15224 59.16733
[13] 40.11043 64.63436 116.10998
runif() 함수는 균일분포를 따르는 난수를 발생시켜준다.
x 객체는 1~100 사이의 값을 가지는 난수 15개, y 객체는 5~120 사이의 값을 가지는 난수 15개를 저장하고 있다.
> opar = par(mfrow=c(1,2))
> plot( ~ x)
> plot(x, y) # plot(y ~ x)와 같은 그래프
> par(opar)
par() 함수의 mfrow 인수를 사용하면 그래프 배열방식을 설정할 수 있다. par(mfrow=c(행,열)) 코드에 원하는 행과 열의 수를 입력하면 여러개의 그래프를 한 화면에 출력할 수 있다. 또한 이 코드를 변수에 저장했다가 par(변수)를 호출하면 이전의 par설정(그래프 배열방식)으로 되돌릴 수 있다. 하지만 이전의 설정이 헷갈릴 수 있기 때문에 그냥 원하는 때에 par(mfrow=c(행,열)) 코드에 행, 열의 수를 입력해서 그래프 배열방식을 바꾸는 것이 더 편한 것 같다.
plot(x)와 plot( ~ x)의 결과는 다르다. 전자는 x객체를 y축에 놓고, x축에는 index(인덱스)를 놓아 그래프가 그려지지만 후자는 x객체를 x축에 놓고 그래프를 그린다.
RStudio를 사용한다면 그래프가 있는 Layout에 Zoom버튼을 눌러 그래프만 새로운 창에서 크게 볼 수 있다.
혹은 그래프를 그리기 전에 x11() 함수를 호출하면 역시 새로운 창에서 그래프를 볼 수 있다.
> x11(); plot(y ~ x)
◎ 그래프 옵션
xlab, ylab | X, Y 축 이름 |
main, sub | 그래프 메인제목, 서브제목 |
pch | 산점도 점의 모양 |
cex | 산점도 점의 크기 |
col, bg | 색상, 채우기 색상 |
xlim, ylim | X, Y 축의 값 범위 |
type | 그래프 유형 |
lwd | 선 넓이 |
lty | 선 유형 |
> 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 데이터를 사용하려 한다.
- xlab, ylab
> plot(iris[,1], iris[,3], xlab="Sepal.Length", ylab="Petal.Length")
xlab, ylab 옵션으로 x축과 y축의 이름을 지정할 수 있다.
- main, sub
> plot(iris[,1], iris[,3], main="iris data", sub="Sepal.Length & Petal.Length")
main 옵션은 그래프의 제목을 지정한다. sub 옵션은 그래프의 서브제목을 지정하는데 x축이름의 밑에 위치해 있다.
- pch
> par(mfrow=c(1,2))
> plot(iris[,1], iris[,3], pch=15)
> plot(iris[,1], iris[,3], pch="*")
pch 옵션으로 그래프 점의 모양을 지정해줄 수 있다. 위의 사진처럼 1~25 숫자로 지정할 수도 있고, 문자를 사용할 수도 있다.
- cex
> plot(iris[,1], iris[,3], cex=.5)
> plot(iris[,1], iris[,3], cex=2)
cex 옵션은 character expension(확대)의 줄임말로 cex가 작을수록 점의 크기가 비례하여 작아지고, 클수록 점의 크기가 비례해 커진다. cex 옵션의 기본값은 1이다.
> par(mfrow=c(1,1))
> plot(iris[,1], iris[,3], cex=iris[,4])
iris의 4번째 열 데이터를 cex 옵션에 넣어주면 4번째 열 데이터의 값에 따라 점크기를 다르게 그릴 수 있다.
- col, bg
> par(mfrow=c(1,2))
> plot(iris[,1], iris[,3], col=iris[,5])
> plot(iris[,1], iris[,3], col=iris[,5], pch=21, bg="#FF9090")
iris의 5번째 열 데이터는 붓꽃의 종류로 setosa, versicolor, virginica에 따라 색상을 다르게 그래프를 그릴 수 있다.
bg 옵션은 pch 옵션이 21~25일때 점의 채우기 색상을 지정할 수 있다. 이때 점의 테두리 색상은 col 옵션으로 지정한다.
col 옵션과 bg옵션은 색상 이름 or RGB 색상 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.
> par(mfrow=c(2,2))
> plot(iris[,1], iris[,3], col="#FF0000")
> plot(iris[,1], iris[,3], col="red")
> plot(iris[,1], iris[,3], col.axis="#FF0000")
> plot(iris[,1], iris[,3], col.lab="#FF0000")
col.axis 옵션이나 col.lab 옵션 등으로 그래프 여러부분의 색상을 변경할 수 있다.
- xlim, ylim
> range(iris$Sepal.Length)
[1] 4.3 7.9
> range(iris$Petal.Length)
[1] 1.0 6.9
> par(mfrow=c(1,1))
> plot(iris[,1], iris[,3], xlim=c(4,10), ylim=c(0,10))
xlim, ylim 옵션으로 좌표축 값의 범위를 조정할 수 있다. 데이터의 최대값, 최솟값을 구해서 그보다 넉넉하게 좌표축 값의 범위를 조정하기도 한다.
- type
> price = rnorm(10)
> price
[1] 0.6221650 -1.4599473 0.4535445 0.2238440 0.8460288
[6] 0.6491366 -1.3982918 0.2797647 -0.2445438 -1.2415558
> par(mfrow=c(2,4))
> plot(price, type="p") # 점
> plot(price, type="l") # 실선
> plot(price, type="b") # 점과 실선(점 통과X)
> plot(price, type="c") # "b"에서 점 제거
> plot(price, type="o") # 점과 실선(점 통과O)
> plot(price, type="h") # 직선
> plot(price, type="s") # 계단
> plot(price, type="S") # 계단
type 옵션으로 그래프의 유형을 지정한다.
"p" for points. "h" for histogram-like vertical lines. |
"n"은 그래프를 그려도 빈화면으로 출력된다. 후에 lines(), text() 함수 등을 빈화면 위에 출력하기 위해 사용한다.
- lwd, lty
> par(mfrow=c(1,2))
> plot(price, type="o", pch=19, col="green", cex=1.5, lwd=3)
> plot(price, type="o", pch=19, col="orange", cex=1.5, lwd=2, lty="dashed")
> par(mfrow=c(1,1))
lwd 옵션은 선 넓이(line width), lty 옵션은 선 유형(line type)을 지정한다. lty 옵션은 숫자 or 문자열로 지정할 수 있다.
(0="blank", 1="solid"(default), 2="dashed", 3="dotted", 4="dotdash", 5="longdash", 6="twodash")
※ 산점도 행렬과 3차원 산점도 그리는 방법
<R 산점도 Scatter - plot/그래프 옵션>
'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 - 산점도행렬/3차원산점도 (0) | 2021.03.15 |
댓글