변수 개수 | 변수 형태 | 그래프 |
일변량 | 연속형 데이터 | 히스토그램 (hist) |
상자 그래프 (boxplot) | ||
범주형 데이터 (명목형, 수치형) |
막대 그래프 (barplot) 파이 차트 (pie) 점 차트 (dotchart) |
|
다변량 | 연속형 데이터 | 산점도(행렬) (plot, pairs) |
범주형 데이터 | 모자이크 그래프 (mosaicplot) |
◎ 막대 그래프
barplot(height, width = 1, space = NULL, names.arg = NULL, legend.text = NULL, beside = FALSE, horiz = FALSE, density = NULL, angle = 45, col = NULL, border = par("fg"), main = NULL, sub = NULL, xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, axes = TRUE, cex.axis = par("cex.axis"), cex.names = par("cex.axis"), ...) |
<인수설명>
height | 막대로 나타낼 데이터 |
width, space | 막대의 너비, 막대 사이의 간격 |
names.arg | 막대나 막대 그룹의 이름 |
legend.text | 오른쪽 상단의 범례에 사용할 문자형 벡터 |
beside | FALSE이면 누적 막대, TRUE이면 그룹별 각각의 막대 출력 |
horiz | TRUE이면 가로막대그래프 |
density, angle | 막대 내부 1인치 당 빗금의 수, 빗금의 각도 |
col | 막대의 색상 |
border | 막대의 테두리 색상 |
main. sub | 주제목, 부제목 |
xlab, ylab | 축의 이름 |
xlim, ylim | 축의 범위 |
axes | 그래프의 축 출력 여부 |
cex.axis | y축 label의 문자 크기 |
cex.names | x축 label의 문자 크기 |
> 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년도 입학 자료로 합격여부, 성별, 지원학과가 테이블 구조로 저장되어 있다.
이 데이터를 사용해서 barplot() 함수의 인수(옵션)들을 설명하려고 한다.
> 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
> str(tab)
'table' num [1:2, 1:6] 825 108 560 25 325 593 417 375 191 393 ...
- attr(*, "dimnames")=List of 2
..$ Gender: chr [1:2] "Male" "Female"
..$ Dept : chr [1:6] "A" "B" "C" "D" ...
먼저 합격여부에 관한 데이터를 합침으로서 3차원의 데이터를 2차원의 테이블 구조로 바꾸어 주었다.
addmargins() 함수를 사용하면 테이블 데이터의 각 행, 열별로 합계가 출력된다.
> barplot(tab)
지원학과별로 남녀의 지원 빈도를 비교해본 막대그래프이다. 각 학과별로 총 지원자 수, 남녀의 지원 비율 등을 파악해볼 수 있다.
- width / space
> par(mfrow=c(1,2))
> barplot(tab, width=c(6,5,4,3,2,1))
> barplot(tab, space=1)
par() 함수를 통해 1행2열의 그래프 배열을 만들어 주었다.
width 인수는 각 막대의 너비를 지정해줄 수 있다. 단일값으로 지정하면 그래프가 변하지 않는데 그 이유는 xlim 인수를 지정해주지 않았기 때문이다. xlim 인수에 대해서는 밑에서 설명하겠다.
space 인수는 막대 사이의 간격을 지정해줄 수 있다. 단일값 또는 위의 width 인수처럼 막대 당 하나의 숫자로 지정할 수 있다.
- names.arg / legend.text
> barplot(tab, names.arg=c('경영','국문','의류','기계','생물','통계'))
> barplot(tab, legend.text=rownames(tab))
names.arg 인수는 각 막대 또는 막대 그룹 아래에 출력할 이름 벡터이다. names.arg 대신 names 로 써도 결과는 동일하다.
legend.text 인수는 그래프에 대한 범례를 구성하는데 사용되는 텍스트 벡터이다. legend.text 대신 legend 로 써도 결과는 동일하다. 범례는 오른쪽 상단에 출력되는데 그래프를 가리는 것을 볼 수 있다. 이는 xlim 인수를 지정해줌으로서 겹치지 않게 출력할 수 있는데 이 글의 가장 마지막에 설명할 <막대그래프 응용> 파트에서 그래프를 가리지않게 범례를 출력해보겠다.
- beside / horiz
> barplot(tab, beside=T)
> barplot(tab, horiz=T)
beside 인수는 기본값이 FALSE이다. FALSE이면 높이의 열이 누적 막대로 표시되고, TRUE이면 열이 나란히 놓인 막대로 출력된다.
horiz 인수 역시 기본값이 FALSE이다. FALSE이면 첫번째 막대가 왼쪽에 오도록 세로막대그래프가 그려진다. TRUE이면 막대는 첫번째 막대가 아래에 오도록 가로막대그래프가 그려진다.
- density / angle
> barplot(tab, density=10)
> barplot(tab, density=10, angle=60)
density 인수는 막대 또는 막대의 구성요소에 대한 음영 선(빗금)의 밀도를 인치당 선의 수로 지정한다. 기본값 NULL은 음영 선이 그려지지 않음을 의미한다.
angle 인수는 막대 내부에 그려지는 음영 선의 기울기이다. 각도는 시계 반대 방향으로 변하고, 기본값은 45º이다.
- col / border
> rainbow(2)
[1] "#FF0000" "#00FFFF"
> barplot(tab, col=rainbow(2))
> barplot(tab, border="red") # border="#FF0000" 와 같음
col 인수는 막대 또는 막대 구성요소의 색상을 지정하는 벡터이다. 기본적으로 벡터 데이터이면 회색이 사용되고, 행렬 데이터이면 감마 보정(gamma-corrected)된 회색 팔레트가 사용된다.
border 인수는 막대의 테두리에 사용할 색상이다. 테두리를 생략하려면 border=NA로 지정하면 된다. density 인수를 지정한 경우 border=TRUE는 음영 선(빗금)과 동일한 테두리 색상을 사용함을 의미한다.
col 과 border 인수는 색상 이름(ex "red") or RGB 색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.
- main, sub / xlab, ylab
> barplot(tab, main="학과별 남여 지원자 수", sub="합격자, 불합격자 통합")
> barplot(tab, xlab="학과", ylab="지원자 수")
main 와 sub 인수는 각각 주제목, 부제목을 지정한다. 부제목은 x축의 아래에 출력된다.
xlab 와 ylab 인수는 각각 x축 이름, y축 이름을 지정한다. sub 인수를 xlab 인수와 함께 사용할 경우 x축 이름 아래에 부제목이 출력된다.
- xlim, ylim / axes
> barplot(tab, xlim=c(0,12), ylim=c(0,1000))
> barplot(tab, axes=F)
xlim 과 ylim 인수는 각각 x축의 범위, y축의 범위를 지정한다. xlim을 넉넉히 지정하면 범례와 함께 그래프를 그렸을때 그래프가 가려지지 않게 그릴 수 있다. 이는 이 글의 가장 마지막에 설명할 <막대그래프 응용> 파트에서 알아볼 수 있다.
axes 인수는 그래프 축의 출력 여부를 지정할 수 있다.
- cex.axis / cex.names
> barplot(tab, cex.axis=1.5)
> barplot(tab, cex.names=2)
cex.axis 와 cex.names 인수는 각각 y축 숫자 label의 크기, x축 각 막대 label의 크기를 조정할 수 있다.
◎ 막대그래프 응용
> barplot(tab, legend=rownames(tab), main="절대적 빈도")
>
> tab_col = apply(tab, 2, sum); tab_col
A B C D E F
933 585 918 792 584 714
> tab_c = tab %*% diag(1/tab_col) * 100; tab_c
Gender [,1] [,2] [,3] [,4] [,5] [,6]
Male 88.42444 95.726496 35.40305 52.65152 32.70548 52.2409
Female 11.57556 4.273504 64.59695 47.34848 67.29452 47.7591
> colnames(tab_c) = c("A","B","C","D","E","F")
>
> barplot(tab_c, legend=rownames(tab_c), main="상대적 비율")
왼쪽 막대그래프는 지원학과 별로 남녀의 절대적 빈도를 비교해 본 것이다. 각 학과별로 총 지원자 수, 남녀 지원자 수를 알 수 있다.
오른쪽 막대그래프는 학과 간의 남녀 비율을 상대적으로 비교해 본 것이다. y축을 보면 0부터 100까지의 값을 가지는 것을 알 수 있다. 상대적 비율이기 때문에 지원자 중 남자 비율이 어느 학과가 더 큰가를 비교하기에 좋다.
> par(mfrow=c(1,1))
> barplot(t(tab), beside=T, legend=colnames(tab),
+ col=rainbow(6), xlim=c(0,18), density=40,
+ cex.names=1.2, main="성별 학과 지원자 수")
이번엔 데이터를 전치시켜서 성별로 지원학과의 분포를 막대그래프로 출력해 보았다. 이제까지 legend 인수에 rownames() 함수를 사용했지만 이번 데이터는 전치를 시켰음으로 colnames() 함수를 사용하였다.
xlim 임수를 넉넉히 잡아 오른쪽에 여백이 많이 생겼음으로 범례를 지정해도 그래프를 가리지 않게 출력된 것을 알 수 있다.
<R 이산변수 시각화 - 막대그래프 barplot>
'R > Graph' 카테고리의 다른 글
R 이산변수 시각화 - 모자이크 플롯 mosaicplot (0) | 2021.03.21 |
---|---|
R 이산변수 시각화 - 파이차트 pie (0) | 2021.03.20 |
R 이산변수 시각화 - 점차트 dotchart (0) | 2021.03.18 |
R 산점도 Scatter - 산점도행렬/3차원산점도 (0) | 2021.03.15 |
R 산점도 Scatter - plot/그래프 옵션 (0) | 2021.03.12 |
댓글