변수 개수 | 변수 형태 | 그래프 |
일변량 | 연속형 데이터 | 히스토그램 (hist) |
상자 그래프 (boxplot) | ||
범주형 데이터 (명목형, 수치형) |
막대 그래프 (barplot) 파이 차트 (pie) 점 차트 (dotchart) |
|
다변량 | 연속형 데이터 | 산점도(행렬) (plot, pairs) |
범주형 데이터 | 모자이크 그래프 (mosaicplot) |
◎ 파이차트
pie(x, labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE, init.angle = if(clockwise) 90 else 0, density = NULL, angle = 45, col = NULL, border = NULL, lty = NULL, main = NULL, ...) |
<인수설명>
x | 양수값을 갖는 수치형 벡터값 |
labels | 파이조각들의 이름 |
edges | 파이차트 외곽선의 개수 |
radius | 파이차트의 반지름 값 |
clockwise | 시계방향(T)으로 회전할지 반시계방향(F)으로 회전할지 설정 |
init.angle | 시작되는 지점의 기준각도 설정 |
density, angle | 파이조각 내부 1인치 당 빗금의 수, 빗금의 각도 |
col | 파이조각 내부의 색상 |
border, lty | 파이조각 테두리 색상, 선의 종류 |
main | 제목 |
> str(UCBAdmissions)
'table' num [1:2, 1:2, 1:6] 512 313 89 19 353 207 17 8 120 205 ...
- attr(*, "dimnames")=List of 3
..$ Admit : chr [1:2] "Admitted" "Rejected"
..$ Gender: chr [1:2] "Male" "Female"
..$ Dept : chr [1:6] "A" "B" "C" "D" ...
UCBAdmissions 데이터셋은 R 프로그램에 저장되어 있는 내장 데이터셋이다. UC 버클리 대학교 대학원의 1973년도 입학 자료로 합격여부, 성별, 지원학과가 테이블 구조로 저장되어 있다.
이 데이터를 사용해서 pie() 함수의 인수(옵션)들을 설명하려고 한다.
> admitted = UCBAdmissions[1,,]
> rejected = UCBAdmissions[2,,]
> tab = admitted + rejected
> addmargins(tab)
Dept
Gender A B C D E F Sum
Male 825 560 325 417 191 373 2691
Female 108 25 593 375 393 341 1835
Sum 933 585 918 792 584 714 4526
>
> dept = apply(tab,2,sum)
> dept
A B C D E F
933 585 918 792 584 714
먼저 합격여부에 관한 데이터를 합침으로서 3차원의 데이터를 2차원의 테이블 구조로 바꾸어 주었다.
addmargins() 함수를 사용하면 테이블 데이터의 각 행, 열별로 합계가 출력된다.
pie() 함수를 설명하기 위한 데이터로 apply() 함수를 사용해서 지원학과별 총 지원자 수를 구하였다.
> pie(dept)
인수를 아무것도 지정하지 않은 그래프이다. pie() 함수는 3시 방향부터 시작해서 시계반대방향으로 파이조각들이 나눠진다. 파이조각들은 직관적으로 알 수 있듯이 데이터의 비율에 따라 크기가 정해진다.
- labels / edges
> par(mfrow=c(1,2))
> pie(dept, labels=c('경영','국문','의류','기계','생물','통계'))
> pie(dept, edges=15)
labels 인수는 파이조각들의 이름을 지정하는 표현식 또는 문자열이다. 비어(“”) 있거나 NA(문자 강제 변환 후) 레이블의 경우 레이블이나 지시선이 그려지지 않는다.
edges 인수는 원형의 외곽선의 개수를 지정하여 다각형으로 만들 수 있다. 기본값은 200이지만 30 이상의 값만 되어도 원형과 비슷한 그래프가 만들어 진다.
- radius
> pie(dept, radius=0.5)
> pie(dept, radius=-0.7)
radius 인수는 파이차트의 반지름을 지정한다. 파이차트는 범위가 -1에서 1 사이인 정사각형 상자의 중앙에 그려진다. 그래서 1을 초과하는 값을 지정하면 그래프가 짤리게 된다. 파이조각의 label 문자열이 너무 길면 radius 값을 더 작게 지정하여 label이 짤리는 것을 방지할 수 있다.
radius 인수에 음수값을 지정하면 파이차트를 180도 회전한 그래프를 그릴 수 있다.
- clockwise / init.angle
> pie(dept, clockwise=T)
> pie(dept, init.angle=90)
clockwise 인수는 파이조각을 시계방향(TRUE)으로 배치할지, 시계 반대방향(FALSE)으로 배치할지를 선택하는 논리값이다. 시계 반대방향이 기본값이다.
init.angle 인수는 파이조각의 시작 각도를 지정하는 숫자이다. init.angle의 기본값은 0 or 360으로 3시 방향부터 파이조각을 배치하고, 90은 12시 방향, 180은 9시 방향, 270은 6시 방향부터 조각을 배치한다.
- density
> pie(dept, density=20)
> pie(dept, density=c(30,25,20,15,10,5))
density 인수는 파이조각 내부의 1인치당 음영선(빗금)의 수를 지정한다. 기본값인 NULL은 음영선(빗금)이 그려지지 않음을 의미한다. 파이조각 당 density 인수를 다르게 지정하여 파이차트를 그릴 수도 있다.
- angle
> den = c(30,25,20,15,10,5)
> pie(dept, density=den, angle=90)
> pie(dept, density=den, angle=c(90,70,50,30,10,-10))
위에서 다르게 지정한 density 인수 값을 den 객체에 저장하여 angle 인수를 설명할 때도 사용하였다.
angle 인수는 각도로 표시된 음영선(빗금)의 기울기이다. 기본값은 45º이고, angle 인수 역시 density처럼 파이조각 당 다르게 값을 지정할 수 있다.
- col / border
> gray(seq(0.4, 0.9, 6))
[1] "#666666" "#808080" "#999999" "#B3B3B3" "#CCCCCC" "#E6E6E6"
> pie(dept, col=gray(seq(0.4,0.9,6)))
> rainbow(6)
[1] "#FF0000" "#FFFF00" "#00FF00" "#00FFFF" "#0000FF" "#FF00FF"
> pie(dept, border=rainbow(6))
col 인수는 파이조각의 색상을 지정하는 벡터이다. gray() 함수 안에 seq() 함수를 사용해서 점점 색이 옅어지는 6가지 회색을 담은 벡터를 col 인수에 지정해준 그래프이다.
border 인수는 파이조각의 테두리에 사용할 색상이다. 테두리를 생략하려면 border=NA로 지정하면 된다.
col 과 border 인수는 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.
- lty / main
> pie(dept, lty=2)
> pie(dept, main="학과별 총 지원자 수")
> par(mfrow=c(1,1))
main 인수는 파이차트의 제목을 지정한다.
lty 인수는 파이차트를 이루는 선의 유형(line type)을 지정한다. lty 인수를 density 인수와 같이 쓰면 파이조각을 채우는 내부 빗금까지 선 유형이 적용된다. lty 인수는 숫자 or 문자열로 지정할 수 있다.
(0="blank", 1="solid"(default), 2="dashed", 3="dotted", 4="dotdash", 5="longdash", 6="twodash")
◎ 파이차트 응용
이 사진은 현재 사용하고 있는 생활시간표로 직접 그린 것이다. 이 생활시간표를 파이차트로 최대한 비슷하게 구현해보려 한다.
> label = c("","취침","","점심&TV시청","이론&코딩공부","","취업준비",
+ "저녁","블로그관리","","운동&스트레칭","목욕","")
> time = c(1,8,1,2,2,1,2,1,2,1,1,1,1)
> sum(time)
[1] 24
먼저 0시를 기준으로 label을 만들었다. 흰색바탕은 label이 출력되지 않게 빈("") 문자열을 입력하였다.
time도 마찬가지로 0시를 기준으로 합이 24시간이 되게끔 시간을 입력하였다. 두 객체의 벡터길이는 13이다.
> col = c("#90CCFF","#9090FF","#FF90FF","#FF9090",
+ "#FFCC90","#FFFF90","#90FF90","#50CC90")
> pie(1:8, col=col)
다음으로 파이차트에 그려질 8가지 색상을 col 객체에 저장하였다. 색상은 RGB 색상(#RRGGBB) 형식으로 지정하였고, 파이차트를 그려 색상을 확인해보았다.
> bool = c(F,T,F,T,T,F,T,T,T,F,T,T,F)
> color = vector()
> n = 1
> for(i in 1:13) {
+ if(bool[i] == T) {
+ color[i] = col[n]
+ n = n+1
+ } else color[i] = "white"
+ }
> color
[1] "white" "#90CCFF" "white" "#9090FF" "#FF90FF"
[6] "white" "#FF9090" "#FFCC90" "#FFFF90" "white"
[11] "#90FF90" "#50CC90" "white"
bool 객체는 논리값으로 이루어져 있고, 위에서 만들었던 time과 label 객체와 같이 길이가 13이다.
bool 객체를 if문에 넣어 FALSE이면 흰색바탕, TRUE이면 위에서 만들었던 col 객체를 순서대로 대입하는 식으로 for문을 반복하여 새로운 color 객체를 만들었다.
> pie(time, labels=label, col=color, init.angle=90, clockwise=T,
+ border=NA, density=50, angle=60)
>
> segments(0, 0, 0, 0.8, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, 0.8, 0, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, 0, -0.8, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, -0.8, 0, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, 0.57, 0.57, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, 0.57, -0.57, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, -0.57, -0.57, col="darkgray", lwd=.5, lty=2)
> segments(0, 0, -0.57, 0.57, col="darkgray", lwd=.5, lty=2)
>
> text(0, 1, "00:00", col="darkgray", cex=.7)
> text(1, 0, "06:00", col="darkgray", cex=.7)
> text(0, -1, "12:00", col="darkgray", cex=.7)
> text(-1, 0, "18:00", col="darkgray", cex=.7)
> text(.75, .75, "03:00", col="darkgray", cex=.7)
> text(.75, -.75, "09:00", col="darkgray", cex=.7)
> text(-.75, -.75, "15:00", col="darkgray", cex=.7)
> text(-.75, .75, "21:00", col="darkgray", cex=.7)
생활시간표를 파이차트로 구현해본 결과이다.
time, label, color 객체를 각각 지정해주었고,
init.angle 인수를 90으로 지정해 0시 방향부터 파이조각을 배치하고,
clockwise 인수를 TRUE로 지정해 파이조각을 시계방향으로 배치하고,
border 인수를 NA로 지정해 파이조각의 경계선을 지우고,
density 인수를 50으로 지정해 파이조각 내부의 빗금을 조정하고,
angle 인수를 60으로 지정해 빗금의 각도를 조정하였다.
segments()는 두개의 점 사이에 선분을 그리는 함수이다. 함수가 받는 인수로 앞에서부터 4개는 (x0, y0) (x1, y1)을 의미한다. 즉, (x0, y0) (x1, y1) 사이의 선분을 그리는 것이다.
text() 함수 또한 앞에서부터 2개의 인수는 (x, y)이고, (x, y)의 자리에 문자열을 넣어줄 수 있다.
<R 이산변수 시각화 - 파이차트 pie>
'R > Graph' 카테고리의 다른 글
R 연속변수 시각화 - 히스토그램 hist (0) | 2021.03.24 |
---|---|
R 이산변수 시각화 - 모자이크 플롯 mosaicplot (0) | 2021.03.21 |
R 이산변수 시각화 - 점차트 dotchart (0) | 2021.03.18 |
R 이산변수 시각화 - 막대그래프 barplot (0) | 2021.03.17 |
R 산점도 Scatter - 산점도행렬/3차원산점도 (0) | 2021.03.15 |
댓글