학습개요
그래프는 데이터를 시각적으로 보여주는데 중요한 역할을 한다.
R프로그램에서 그래프 함수를 잘 활용하면 데이터를 보다 명료하고 해석이 용이하게 할 수 있다.
이번 장은 R프로그램에서 활용할 수 있는 그래프 함수에 대해서 알아본다.
학습목표
1. PLOT 함수에 대해서 알아보자.
2. PLOT 함수 옵션에 대해서 알아보자.
3. R에서 제공하는 PLOT 종류에 대해서 알아보자.
4. 그래프에 유용한 함수들을 알아보자.
5. 통계분포 함수를 이용하여 그래프를 그려보자
주요용어
Plot, Points, Lines, 분포
1. 그래프 함수 활용
도입
그래프라는 개념이 없었다면 어떻게 되었을까? 간단한 자료는 쉽게 파악할 수 있지만 복잡한 자료는 그렇지 못할 것이다.
머릿속으로 복잡한 자료의 구조나 형태를 파악하려면 머리가 몇 분도 안되서 아파 올 것이다.
R프로그램은 그래픽이 매우 뛰어난 프로그램 언어이다.
그러므로 우리는 R프로그램을 활용해 복잡한 통계데이터를 그래프화 할 수 있을 것이다.
(1) 기본적인 그래프 함수
• Plot() 함수
>plot(x,y,main=,sub=,xlab =, ylab=, type=,axes=“”,col=“”,pch=“”)
∙ x : X축의 자료, y: Y축의 자료
∙main : plot의 전체 제목
∙sub : plot의 부 제목
∙xlab : x축 제목, ylab: y축의 제목.
∙type : plot의 형태를 결정.
∙axes : plot의 테두리 관련
∙col : plot의 색
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, main="PLOT", sub="Test", xlab="number", ylab="value")
• type의 종류
∙ "p" : 점
∙ "l" : 선
∙ "b" : 점과 선 ⇒ "c" : “b"에서 점 제외.
∙ "o" : 점을 선이 통과
∙ "h" : 수직선으로 된 “histogram"
∙ "s" : 계단형 그래프
∙ "S" : 다른 계단형 그래프
∙ "n" : 그래프 없음
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="p")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="l")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="b")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="c")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="o")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="h")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="s")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="S")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="n")
• points() 함수
점을 그리는 함수.
>points(x, y, pch= , cex= )
tip1) pch=" " : " " 안에 내용이 바로 출력
pch=숫자 : 숫자에 해당되는 형태 출력
cex=숫자 : 숫자
가 클수록 큰 점
이 출력
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>z<-c(3.5, 2.2, 1.5, 4.6, 6.9)
>a<-c(1,9,13)
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="n")
>points(z, pch=1, cex=1)
>points(z, pch=3, cex=1)
>points(z, pch=5, cex=1)
>points(z, pch=7, cex=1)
>points(z, pch=9, cex=1)
>points(z, pch=11, cex=1)
>points(z, pch=13, cex=1)
>points(z, pch=15, cex=1)
>points(z, pch=17, cex=1)
>points(z, pch=19, cex=1)
• lines() 함수
선을 그리는 함수.
>lines(x, lty=, col=, pch= , lwd= )
lwd = 숫자 : 숫자가 클수록
굵은 선이 출력된다.
예) lty
>plot(0:6,0:6,type="n",
ylim=c(0,20))
>lines(c(1,3),c(20,20), lty=1)
>lines(c(1,3),c(19,19), lty=2)
>lines(c(1,3),c(18,18), lty=3)
>lines(c(1,3),c(17,17), lty=4)
>lines(c(1,3),c(16,16), lty=5)
>lines(c(1,3),c(15,15), lty=6)
>lines(c(1,3),c(14,14), lty="blank")
>lines(c(1,3),c(13,13), lty="solid")
>lines(c(1,3),c(12,12), lty="dashed")
>lines(c(1,3),c(11,11), lty="dotted")
>lines(c(1,3),c(10,10), lty="dotdash")
>lines(c(1,3),c(9,9), lty="longdash")
>lines(c(1,3),c(8,8), lty="twodash")
>lines(c(1,3),c(7,7), lty="33")
>lines(c(1,3),c(6,6), lty="24")
>lines(c(1,3),c(5,5), lty="F2")
>lines(c(1,3),c(4,4), lty="2F")
>lines(c(1,3),c(3,3), lty="3313")
>lines(c(1,3),c(2,2), lty="F252")
>lines(c(1,3),c(1,1), lty="FF29")
(2) Plot 그릴 때 유용한 함수
• par() 함수
∙그림을 조절하거나 그림창의 특성을 지정하기 위해서 사용
∙선의 굵기와 종류, 문자의 크기와 글꼴, 색깔도 지정 가능
∙그림의 위치 지정 가능
∙한 plot을 여러 창으로 나눌 때 사용
help(par) 또는 ?par를 입력하면 par() 함수에 대한 더 많은 내용을 알 수 있다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>par(mfrow=c(2,5))
→ 2행 5열의 그래프를 그릴 수 있다.
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="p")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="l")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="b")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="c")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="o")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="h")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="s")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="S")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="n")
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>par(bg="orange")
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="p")
→그래프 뒷 배경의 색이 오렌지 색으로 바뀐다.
• text() 함수
그래프 안에 글자를 넣는다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="p")
>text(3,5,"Plotting",col="red")
→(3, 5)지점에 "Plotting" 이라는 글자를 넣는다.
• abline() 함수
그래프 안에 새로운 수직선을 넣는다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="p")
>abline(h=3, v=4, lty=3)
→ x축 4, y축 3을 통과하는 수직선이 그려진다.
• axis() 함수
그래프 상,하,좌,우 축을 넣는다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, main="PLOT", sub="Test", xlab="x-label", ylab="y-label", type="n")
>points(x,y,col="red")
>abline(h=3, v=4, lty=3)
>axis(2, at = 3, label="3")
→ 왼쪽 축에 3을 출력한다.
>text(4.5, 3.5, "(4, 3)", col="blue")
→ (4, 3)을 화면에 출력한다.
• legend() 함수
범례를 그래프 안에 넣어주는 함수.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, type='n')
>legend("bottomright", "(x,y)", pch=1, title="bottomright")
>legend("bottom", "(x,y)", pch=1, title="bottom")
>legend("bottomleft", "(x,y)", pch=1, title="bottomleft")
>legend("left", "(x,y)", pch=1, title="left")
>legend("topleft", "(x,y)", pch=1, title="topleft, inset = .05", inset = .05)
>legend("top", "(x,y)", pch=1, title="top")
>legend("topright", "(x,y)", pch=1, title="topright, inset = .02", inset = .02)
>legend("right", "(x,y)", pch=1, title="right")
>legend("center", "(x,y)", pch=1, title="center")
>legend(8,4,"Legend(범례)“)
→ (8, 3) 지점에 범례를 위치시킨다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, type='n')
>legend(locator(1),"Legend(범례)“)
→ locator(1) : 마우스로 그래프 위에 원하는 곳에 찍으면 그곳에 범례가 출력됨.
• box() 함수
그래프 안과 밖에 박스를 그리는 함수.
예)
>par(mar=c(4,4,4,4))
>par(oma=c(4,4,4,4))
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>plot(x, y, type="p",axes=F)
>s<-c("outer", "inner", "plot", "figure")
→outer:그래픽상자의 바깥쪽, inner:outer 주변의 안쪽, plot:plot 영역의 테두리
figure:figure 영역의 테두리
>box(which=s[1], lty=1)
>box(which=s[2], lty=2)
>box(which=s[3], lty=3)
>box(which=s[4], lty=4)
• curve() 함수
곡선 그리기 함수
예)
>x<- rnorm(100, mean=5, sd=1)
→ 평균이 5이고 표준편차가 1인 정규분포에서 100의 샘플을 생성한다.
>hist(x)
>hist(x, freq=F)
→ freq=F : 빈도가 아닌 밀도로 표시
>curve(dnorm(x, mean=5, sd=1), add=T)
→ 평균이 5이고 표준편차가 1인 정규분포의 밀도 함수 곡선을 그린다.
add=T : 겹쳐 그림.
• layout() 함수
예)
>x <- pmin(3, pmax(-3, rnorm(50)))
>y <- pmin(3, pmax(-3, rnorm(50)))
>xhist <- hist(x, breaks=seq(-3,3,0.5), plot=FALSE)
>yhist <- hist(y, breaks=seq(-3,3,0.5), plot=FALSE)
>top <- max(c(xhist$counts, yhist$counts))
>xrange <- c(-3,3)
>yrange <- c(-3,3)
>nf <- layout(matrix(c(2,0,1,3),2,2,byrow=TRUE), c(3,1), c(1,3), TRUE)
>layout.show(nf)
>par(mar=c(3,3,1,1))
>plot(x, y, xlim=xrange, ylim=yrange, xlab="", ylab="")
>par(mar=c(0,3,1,1))
>barplot(xhist$counts, axes=FALSE, ylim=c(0, top), space=0)
>par(mar=c(3,0,1,1))
>barplot(yhist$counts, axes=FALSE, xlim=c(0, top), space=0, horiz=TRUE)
(3) Plot의 종류(1)
• box plot(상자그림)
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>z<-c(3.5, 2.2, 1.5, 4.6, 6.9)
>boxplot(x,z)
• 파이차트
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>pie(x)
• Bar plot
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>barplot(x)
• 히스토그램
hist(x, freq=)
freq=T : 빈도 출력(기본 값) , freq=F : 밀도 출력
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>hist(x)
(4) Plot의 종류(2)
• pairs()함수
많은 변수들의 그래프를 한 화면에 출력한다.
예)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>a<-data.frame(x,y)
>pairs(a)
• parcoord()함수
각 변수들의 값을 연결한 선들의 그래프를 출력한다.
예)
>library(MASS)
>x<-c(2,5,8,5,7,10,11,3,4,7,12,15)
>y<-c(1,2,3,4,5,6,7,8,9,10,11,12)
>z<-c(4,7,5,2,4,8,9,10,12,4,6,8)
>a<-data.frame(x,y,z)
>parcoord(a)
5) 통계분포 그래프 그리기
• 분포의 종류
확률분포 확률분포의 이름 모수
베타분포 beta shape1, shape2, ncp
이항분포 binom size, prob
코쉬분포 cauchy location, scale
카이제곱분포 chisq df, ncp
지수분포 exp rate
F-분포 f df1, df2, ncp
감마분포 gamma shape, scale
기하분포 geom prob
초기하분포 hyper m, n, k
로그-정규분포 lnorm meanlog, sdlog
로지스틱분포 logis location, scale
음이항분포 nbinom size, prob
정규분포 norm mean, sd
포아송분포 pois lambda
t-분포 t df, ncp
일양분포 unif min, max
와이블분포 weibull shape, scale
윌콕슨분포 wilcox m, n
r함수명 : 분포함수의 샘플 추출
예) > x<-rnorm(100, mean=4, sd=2)
→ 평균이 4이고 표준편차가 2인 정규분포에서 샘플 100개를 추출.
d함수명 : 분포함수의 밀도함수 값
예) > dnorm(x, mean=4, sd=2)
→ 평균이 4이고 표준편차가 2인 정규분포의 밀도 함수 값을 나타냄.
p함수명 : quantile값에 해당하는 확률값
예) > pnorm(2, mean=4, sd=2)
→ 평균이 4이고 표준편차가 2인 정규분포에서 2인 지점의 확률 값을 나타냄
q함수명 : 확률값에 해당하는 quantile값
예) > qnorm(0.5, mean=4, sd=2)
→ 평균이 4이고 표준편차가 2인 정규분포에서 확률이 0.5가 되는 지점을 나타냄.
• 정규분포
예)
>x<-rnorm(1000, mean=5, sd=1)
→ 평균이 5이고 표준편차가 1인 정규분포 샘플 1000개를 생성한다.
>hist(x, freq=F)
→ freq=F : 빈도가 아닌 밀도로 히스토그램을 그린다. (기본값은 T)
>curve(dnorm(x,mean=5, sd=1),add=T)
→ add=T : 이미 열린 그림판위에 곡선 그림을 겹쳐그린다. (기본값은 F)
• 지수분포
예)
>x<-rexp(1000, rate=1)
→ 평균이 1인 지수분포 샘플 1000개를 생성한다.
>hist(x, freq=F)
→ freq=F : 빈도가 아닌 밀도로 히스토그램을 그린다. (기본값은 T)
>curve(dexp(x, rate=1),add=T)
→ add=T : 이미 열린 그림판위에 곡선 그림을 겹쳐그린다. (기본값은 F)
• 베타분포
예)
>x<-rbeta(1000, shape1=0.5, shape2=0.2, ncp=5)
→ shape모수1이 0.5,shape모수2=0.5, ncp=5인 베타분포 샘플 1000개를 생성한다.
>hist(x, freq=F)
→ freq=F : 빈도가 아닌 밀도로 히스토그램을 그린다. (기본값은 T)
>curve(dbeta(x,shape1=0.5, shape2=0.2, ncp=5),add=T)
→ add=T : 이미 열린 그림판위에 곡선 그림을 겹쳐그린다. (기본값은 F)
• 감마분포
예)
>x<-rgamma(1000, shape=2, scale=1)
→ shpae모수가 2, scale 모수가 1인 감마분포 샘플 1000개를 생성한다.
>hist(x, freq=F)
→ freq=F : 빈도가 아닌 밀도로 히스토그램을 그린다. (기본값은 T)
>curve(dgamma(x, shape=2, scale=1),add=T)
→ add=T : 이미 열린 그림판위에 곡선 그림을 겹쳐그린다. (기본값은 F)
그래프 함수 : 그래프는 데이터를 시각적으로 보여주는데 중요한 역할을 한다. R프로그램에서 그
래프 함수를 잘 활용하면 데이터를 보다 명료하고 해석이 용이하게 할 수 있다.
1. 기본적인 그래프 함수
(1) plot() 함수 : 기본적인 그래프 함수
(2) points() 함수 : 점을 그리는 함수
(3) lines() 함수 : 선을 그리는 함수
2. Plot을 그릴때 유용한 함수
(1) par() 함수
그림을 조절하거나 그림창의 특성을 지정하기 위해서 사용.
선의 굵기와 종류, 문자의 크기와 글꼴, 색깔도 지정 가능.
그림의 위치 지정 가능.
한 plot을 여러 창으로 나눌 때 사용.
(2) text() 함수 : 그래프 안에 글자를 넣는 함수.
(3) abline() 함수 : 그래프 안에 새로운 직선을 넣는 함수.
(4) axis() 함수 : 그래프의 상, 하, 좌, 우 축을 넣는 함수.
(5) legend() 함수 : 그래프 안에 범례를 넣는 함수.
(6) box() 함수 : 그래프 안과 밖의 박스를 넣는 함수.
(7) curve() 함수 : 그래프위에 곡선을 넣는 함수.
(8) layout() 함수 : 그래프 외곽에 주변 그래프를 넣는 함수.
3. Plot의 종류
(1) boxplot() 함수 : Box plot을 그리는 함수.
(2) pie() 함수 : 원 그래프를 그리는 함수.
(3) barplot() 함수 : Bar 모양의 그래프를 그리는 함수.
(4) hist() 함수 : 히스토 그램을 그리는 함수.
(5) pairs() 함수 : 많은 변수들의 매트릭스 plot을 그리는 함수.
(6) parcoord() 함수 : 각 변수들의 값을 연결한 선들의 그리는 함수.
4. 통계 분포 함수
(1) r분포함수명() : 통계 분포의 샘플을 추출하는 함수.
(2) d분포함수명() : 통계 분포의 밀도 함수 값을 출력하는 함수.
(3) p분포함수명() : Quantile 값에 해당하는 확률 값을 출력하는함수.
(4) q분포함수명() : 확률값에 해당하는 quantile값을 출력하는 함수.