R을 사용한 데이터 시각화 - 2. barplot 그리기

지난 포스트에서는 기본적인 plot을 그리는 방법과, 가장 널리 쓰이는 패키지인 ggplot2을 간단히 다루어 보았다.

이번 포스트에서는 내장 데이터셋을 Barplot (막대 그래프) 으로 표현해 볼 것이다.

library는 마찬가지로 gglpot2 plotrix boot scatterplot3d lattice MASS 을 기본으로 한다.

데이터셋 sleep으로 Barplot 그리기

먼저 sleep가 어떤 형태인지부터 보자.

열이 세개로, 각각 extra, group, ID 라는 이름을 가지고 있다.

ID는 각각의 사람을 의미하고, group은 실험의 상태를 분류하며, extra는 이에 대한 결과값이다.

이제 x축은 ID, y축은 extra, 그리고 group별로 다른 색상을 나타내는 Barplot을 그려 보자.

1
2
3
4
5
6
7
head(sleep)
attach(sleep) #sleep내의 objects(extra, group, ID)를 이름으로 쉽게 접근가능
y <- rbind(extra[1:10], extra[11:20]) #group별로 extra값을 나누어 row bind 시킴. form : num
barplot(y, names.arg = ID[1:10], col = 5:6, xlab = "ID", ylab = "Extra Sleep Hour", beside = T)
# beside는 논리값으로, True이면 값을 병렬적으로, False이면 값을 쌓아서 반환함
abline(h=0) #높이가 0인 line을 덧그림
legend('topleft', title = 'group', legend = 1:2, fill = 5:6) # legend 추가

결과

attach()는 데이터를 붙인다는 뜻인데, 데이터 내의 오브젝트에 이름으로 접근이 가능해진다.

그래서 바로 아랫줄에서 extra[1:10] 이런 식으로 서술이 가능하고, 이를 rbind()을 사용하여 행렬로 만든다.

barplot()을 사용하려면 제일 앞에 들어가는 y를 이처럼 vector 혹은 matrix 형태로 바꾸어 주어야 한다.

함수 내부의 beside= 옵션은 TRUE일 때 데이터를 병렬적으로 보여주고, FALSE이면 하나의 막대에 전부 합쳐서 출력한다.

데이터셋 sleep으로 Barplot 그리기 (ggplot2)

이번에는 동일한 barplot을 ggplot2 패키지를 사용해서 그려보자. 함수는 geom_bar()을 사용한다.

1
2
3
4
5
library(ggplot2)
ggplot(sleep, aes(x=ID, y=extra, fill = group))+ # fill은 면의 컬러를 채울때 사용
geom_bar(stat = "identity", position = "dodge")+ # stat값을 identity로 지정하면 y 데이터를 높이로 사용
# position을 default로 놔두면 값이 쌓아지고, dodge를 할당하면 병렬적으로 출력됨
theme_bw() # data가 더 잘보이기 위한 테마

결과

먼저 ggplot()에서 인풋 데이터를 지정하고, aes 안에 x,y축 데이터를 지정하였는데 그다음에 fill = group이라는 옵션을 사용하였다.

대단히 자주 쓰이는 표현으로, group에 따라 면의 컬러를 다르게 칠하라는 뜻이다.

geom_bar()은 본 패키지에서 barplot을 그리게 하는 함수로, 가장 자주 쓰이는 옵션이 바로 stat=position=이다.

stat은 statistic의 약자로, 바 그래프의 형태에 대해서 지정하는 옵션이다. stat='identity'라고 쓰게 되면, y축 데이터를 높이로 하는 바 그래프를 그리라는 뜻이다.

position은 막대의 위치를 의미하며, position='dodge'는 여러 데이터를 독립적인 바 그래프로 나란히 표현할 때 사용한다. 이 옵션을 표기하지 않으면 데이터가 하나의 막대로 표시된다.

position=dodge 를 표기하지 않았을 때

데이터셋 USPersonalExpenditure으로 Barplot 그리기

먼저 USPersonalExpenditure가 어떤 형태인지 알아보자.

Matrix의 형태로, 행에는 지출 항목, 그리고 열에는 년도가 기록되어 있다. 이들이 만나는 곳에는 실제 지출의 크기가 표기되어 있다.

이제 이 데이터를 최대한 잘 파악하기 위해, 년도별로 지출의 크기를 각 항목으로 나누어 바 그래프를 그려 보자.

1
2
3
4
5
data(USPersonalExpenditure) # Global Environment에 데이터 추가
UPE <- USPersonalExpenditure # 너무 길어서 간략화
str(UPE) #데이터의 form확인 : num
barplot(UPE, beside = T, col = 2:6, xlab = "Year", ylab = "Expenditure ($)", main = "United States Personal Expenditures")
legend('topleft', legend = row.names(UPE), fill = 2:6, cex = 0.7) # legend의 이름을 data의 row.name으로

결과

원하는 대로 깔끔하게 data visualization 에 성공했다!

앞선 sleep와 마찬가지로 데이터를 병렬적으로 표기하기 위해 beside=T 옵션을 넣었고, 각각의 막대 컬러를 2번 ~ 6번 색상으로 다르게 지정했다.

그리고 legend()를 사용하여 따로 범례를 추가하였는데, 범례 이름은 UPE의 행 이름으로 지정했고, 색상은 fill=을 사용하여 앞서 지정하였던 막대 컬러 2~6번과 동일하게 하였다.

또한 cex=가 등장하였는데, 이는 글자 크기를 조절하는 데에 사용하며 비율로 결정되므로 적절히 조절해서 숫자를 넣으면 된다. 자주 쓰이는 옵션이니 기억해 두자.

이어지는 포스트에서는 barplot 외에 자주 쓰이는 histogram 및 boxplot 에 대해 다루어 볼 예정이다.

본 포스트는 KAIST 전산학부 대학원 과정에서 수강하고 있는 Big Data Analytics using R (CS564)을 실습하며 작성하였음을 밝힙니다.