변수 개수 | 변수 형태 | 그래프 |
일변량 | 연속형 데이터 | 히스토그램 (hist) |
상자 그래프 (boxplot) | ||
범주형 데이터 (명목형, 수치형) |
막대 그래프 (barplot) 파이 차트 (pie) 점 차트 (dotchart) |
|
다변량 | 연속형 데이터 | 산점도(행렬) (plot, pairs) |
범주형 데이터 | 모자이크 그래프 (mosaicplot) |
◎ 점차트
dotchart(x, labels = NULL, groups = NULL, gdata = NULL, cex = par("cex"), pt.cex = cex, pch = 21, gpch = 21, bg = par("bg"), color = par("fg"), gcolor = par("fg"), lcolor = "gray", xlim = range(x[is.finite(x)]), main = NULL, xlab = NULL, ylab = NULL, ...) |
<인수설명>
x | 수치형 데이터 |
labels | 각 점들의 label 벡터 |
groups | x의 원소를 그룹짓는 기준 |
gdata | 각 그룹에 대한 요약 |
cex, pt.cex | 그래프 전체 문자 크기(점 포함), 그래프 내부 점의 크기 |
pch, gpch | 점의 종류, 그룹의 대표값에 쓰일 점의 종류 |
bg | 점의 채우기 색상 |
color, gcolor, lcolor | 점과 label의 색, 그룹 label의 색, 수평선의 색 |
xlim | 그래프의 수평 범위 |
main | 제목 |
xlab, ylab | 축의 이름 |
> 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년도 입학 자료로 합격여부, 성별, 지원학과가 테이블 구조로 저장되어 있다.
이 데이터를 사용해서 dotchart() 함수의 인수(옵션)들을 설명하려고 한다.
> 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
> df = as.data.frame(tab)
> df
Gender Dept Freq
1 Male A 825
2 Female A 108
3 Male B 560
4 Female B 25
5 Male C 325
6 Female C 593
7 Male D 417
8 Female D 375
9 Male E 191
10 Female E 393
11 Male F 373
12 Female F 341
먼저 합격여부에 관한 데이터를 합침으로서 3차원의 데이터를 2차원의 테이블 구조로 바꾸어 주었다. addmargins() 함수를 사용하면 테이블 데이터의 각 행, 열별로 합계가 출력된다.
초반 dotchart() 함수의 인수를 설명하기 위해 테이블 구조를 데이터프레임으로 바꾸어 주었다.
dotchart(df$Freq)
그래프의 인수를 아무것도 지정하지 않았을 때이며 데이터를 표현하는 점들이 밑에서부터 채워지고 있음을 볼 수 있다. 이제 이 그래프에 label, color, 점의 type, size 등을 지정해보려 한다.
- labels / groups
> str(df)
'data.frame': 12 obs. of 3 variables:
$ Gender: Factor w/ 2 levels "Male","Female": 1 2 1 2 1 2 1 2 1 2 ...
$ Dept : Factor w/ 6 levels "A","B","C","D",..: 1 1 2 2 3 3 4 4 5 5 ...
$ Freq : num 825 108 560 25 325 593 417 375 191 393 ...
>
> par(mfrow=c(1,3))
> dotchart(df$Freq, labels=df$Dept)
> dotchart(df$Freq, groups=df$Gender) # it must be a factor
> dotchart(df$Freq, groups=df$Gender, labels=df$Dept)
par() 함수를 사용해서 1행 3열의 그래프 배열을 지정해주었고, 왼쪽부터 그래프가 채워진다.
labels 인수는 각 점에 대한 레이블 데이터이다. 벡터의 경우 기본값은 names(x)를 사용하고, 행렬의 경우 기본값은 행의 레이블 dimnames(x)[[1]]를 사용한다. 위의 경우 label을 지원학과로 지정해주었다.
groups 인수는 x의 원소가 그룹화되는 방식을 나타낸다. x가 행렬이면 그룹은 기본적으로 x의 열로 설정된다. groups 인수에 들어갈 벡터는 요인(Factor)형이여야 한다.
- gdata / pch, gpch
> tab = xtabs(Freq ~ Dept + Gender, df)
> tab
Gender
Dept Male Female
A 825 108
B 560 25
C 325 593
D 417 375
E 191 393
F 373 341
> apply(tab, 2, mean)
Male Female
448.5000 305.8333
>
> dotchart(tab, gdata=apply(tab,2,mean))
> dotchart(tab, pch=4)
> dotchart(tab, gdata=apply(tab,2,mean), gpch=4)
x가 이전처럼 데이터프레임인 경우 labels 인수와 groups 인수를 계속 지정해줘야 한다. 그래서 이후부터 데이터프레임을 xtabs() 함수를 사용해 테이블 구조로 바꾼 객체를 가지고 설명하겠다.
gdata 인수는 그룹에 대한 데이터 값이다. 이는 일반적으로 각 그룹의 중앙값 또는 평균과 같은 요약이다. apply() 함수를 사용해 열에 대한 평균을 구하여 gdata 인수에 지정해주었다. 그래프를 보면 group 이름 옆에 진한선으로 평균값을 나타내는 수평선이 추가된 것을 알 수 있다.
pch와 gpch 인수는 점의 종류(문자 또는 기호), 그룹의 대표값에 쓰일 점의 종류(문자 또는 기호)이다.
※ xtabs() 함수 or table 계열 함수 더 알아보기
- cex, pt.cex / bg
> dotchart(tab, bg="#FF0000") # bg="red"와 같음
> dotchart(tab, pt.cex=2)
> dotchart(tab, cex=1.5)
bg 인수는 점의 배경색상을 지정한다. 색상이름(ex "red") or RGB색상(ex #FF0000) 등으로 지정할 수 있다. RGB를 사용해 색상을 변경하려면 "#RRGGBB"의 형식으로 값을 지정한다.
pt.cex 인수는 그래프 내부 점의 크기는 조절할 수 있다. 마치 plot() 함수의 cex처럼 작동한다.
cex 인수는 문자 크기를 조절할 수 있다. label과 그룹 label, x축 label, 점의 크기까지 한번에 확대 or 축소 됨을 알아두어야 한다. cex를 1보다 작은 값으로 설정하면 레이블 겹침을 방지하는데 유용한 방법이 될 수 있다.
※ cex 인수를 지정한 그래프를 그린 후 다음 그래프를 그릴때 그래프의 전체 크기가 변형되는 현상이 계속 발생하여 여기서는 인수설명의 순서를 cex가 마지막에 오도록 바꾸었다.
- color, gcolor, lcolor
> dotchart(tab, color="#FF0000")
> dotchart(tab, gcolor="#FF0000")
> dotchart(tab, lcolor="#FF0000")
color 인수는 점과 label의 색상을 지정한다.
gcolor 인수는 그룹 label의 색상을 지정한다.
lcolor 인수는 수평선의 색상을 지정한다.
color, gcolor, lcolor 인수 또한 bg 인수처럼 색상이름(ex "red") or RGB색상(ex #FF0000) 등으로 지정할 수 있다.
- xlim / main / xlab, ylab
> dotchart(tab, xlim=c(0,1200))
> dotchart(tab, main="성별 학과 지원자 수")
> dotchart(tab, xlab="지원자 수", ylab="성별 지원학과")
xlim 인수는 x축의 범위를 지정한다.
main 인수는 주제목을 지정한다.
xlab 와 ylab 인수는 각각 x축 이름, y축 이름을 지정한다.
◎ 점차트 응용
> df$color[df$Gender=="Male"] = "red"
> df$color[df$Gender=="Female"] = "blue"
>
> par(mfrow=c(1,2))
> dotchart(df$Freq, groups=df$Gender, labels=df$Dept, color=df$color)
> dotchart(tab, gdata=apply(tab,2,mean), gpch=17, gcolor=c("red","blue"))
초반 설명에서 사용한 데이터프레임에 color 열을 추가하였다. 남녀 성별에 따라 그룹의 색상을 다르게 지정해주고 싶어서이다. 오른쪽 그래프는 gdata 인수에서 설명했던 그룹의 대표값인 평균 데이터를 그래프에 출력하였고, 점의 종류와 색상을 다르게 지정해주었다.
> str(mtcars)
'data.frame': 32 obs. of 11 variables:
$ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
$ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
$ disp: num 160 160 108 258 360 ...
$ hp : num 110 110 93 110 175 105 245 62 95 123 ...
$ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
$ wt : num 2.62 2.88 2.32 3.21 3.44 ...
$ qsec: num 16.5 17 18.6 19.4 17 ...
$ vs : num 0 0 1 1 0 1 0 1 1 1 ...
$ am : num 1 1 1 0 0 0 0 0 0 0 ...
$ gear: num 4 4 4 3 3 3 3 4 4 4 ...
$ carb: num 4 4 1 1 2 1 4 2 2 4 ...
> data = mtcars[order(mtcars$mpg), ]
mtcars 데이터셋은 R 프로그램에 저장되어 있는 내장 데이터셋이다. 1974년 Motor Trend US 매거진에서 발췌되었으며 연료 소비량과 자동차 32대(1973-74 모델)의 디자인 및 성능의 10가지 측면으로 구성된 데이터셋이다.
11개의 변수 중 mpg 마일, cyl 실린더 수를 사용하여 점차트를 그려보려 한다. 먼저 order() 함수를 사용해 mpg에 대한 오름차순으로 데이터를 정렬시켜준다.
> dotchart(data$mpg, labels=rownames(data), cex=.7, xlab="mpg")
>
> grps = as.factor(data$cyl)
> color = c("#909090","#FF9090","#9090FF")
> data$pch[data$cyl==4] = 15
> data$pch[data$cyl==6] = 16
> data$pch[data$cyl==8] = 17
>
> dotchart(data$mpg, labels=rownames(data), groups=grps,
+ gcolor=color, color=color[grps],
+ cex=.7, pt.cex=1, pch=data$pch, xlab="mpg")
오름차순으로 정렬했기 때문에 그래프가 보기좋게 출력되었다. label은 자동차 32대의 종류이고, label 겹침을 방지하기 위해 cex를 0.7로 지정해주었다.
오른쪽 그래프는 그룹을 지정하기 위해 cyl 변수를 요인(Factor)형으로 변환시켰고, color 객체에 그룹별로 지정할 색상을 저장하였다. 또한 그룹별로 점의 종류를 다르게 지정하고 싶어서 데이터프레임에 pch 변수를 추가하여 cyl의 값별로 점의 종류를 지정하는 숫자를 저장하였다. 왼쪽 그래프와 같이 label 겹침을 방지하기 위해 cex를 0.7로 지정해주었지만 점의 크기는 따로 지정하여 축소되지 않게 하였다.
이 그래프로 실린더 수가 적을수록 주행마일이 늘어나는 것을 알아볼 수 있다.
<R 이산변수 시각화 - 점차트 dotchart>
'R > Graph' 카테고리의 다른 글
R 이산변수 시각화 - 모자이크 플롯 mosaicplot (0) | 2021.03.21 |
---|---|
R 이산변수 시각화 - 파이차트 pie (0) | 2021.03.20 |
R 이산변수 시각화 - 막대그래프 barplot (0) | 2021.03.17 |
R 산점도 Scatter - 산점도행렬/3차원산점도 (0) | 2021.03.15 |
R 산점도 Scatter - plot/그래프 옵션 (0) | 2021.03.12 |
댓글