R을 사용한 데이터 시각화 - 1. ggplot2 기본

R은 데이터 시각화에 강력한 라이브러리들을 여럿 가지고 있어서 매우 유용하다.

이번 포스트에서 사용할 라이브러리는 아래와 같다.

library : gglpot2 plotrix boot scatterplot3d lattice MASS

먼저, 내장 데이터셋인 faithful 을 기본 함수 plot()을 통해 그려보자.

faithful의 개략적 형태

1
2
3
4
5
6
7
8
9
head(faithful)
fa <- faithful[order(faithful$waiting),]
# waiting을 오름차순으로 정렬한 값을 fa에 저장
head(fa)
x <- fa[,2]; y <- fa[,1]
# waiting을 x에, eruptions을 y에 저장
plot(x,y,type="l", col=4, xlab = "Waiting Time", ylab = "Eruption Time", main = "Old Faithful Eruptions")
points(x,y, pch=20, col=3)
# pch는 점의 생김새를 의미, 20은 작은 점

fa는 waiting 열을 order()을 통해 정렬한 faithful 데이터를 기록한 것이다.

즉, fa[,1] = fa$eruptions 이고, fa[,2] = fa$waiting 이다.

plot()은 type을 지정할 수 있으며, 여기서는 line을 나타내었다.

point()는 말 그대로 점을 찍는 함수이며, 여기서 점의 생김새를 결정하는 pch= 를 한번 보자.

여러가지 타입이 있다는 것만 알면 된다. 중요한 것은 pch= 가 점의 타입을 결정하는 요소이며 자주 쓰이는 것이 pch = 20(점), 21, 22, 23, 24, 25 라는 사실이다.

이번에는 동일한 데이터를 ggplot2 패키지를 통해서 그려 보자.

1
2
3
4
5
library(ggplot2)
ggplot(fa, aes(x,y))+
geom_point(col=3) + geom_line(col=4) + # 점을 찍을 때 geom_point를 사용
xlab('Waiting time') + ylab('Eruption time')+
ggtitle('Old Faithful Eruption')

역시 ggplot2 답게 그래프 디자인이 조금 더 깔끔해 보인다.

ggplot()함수는 어떤 데이터로 어느 축에 할당할 것인지 정한다. 이 함수만 출력하면 아무것도 plot되지 않음에 주의하자. 실제로 점을 찍고 선을 긋는 함수는 뒤에 있다.

자주 쓰이는 형태는 ggplot(data, aes(x = , y = , fill = ))으로, fill값에 대해서는 뒤에 다시 설명하겠다.

geom_point()는 말그대로 점을 찍는 함수이다. 여기에도 여러가지 디자인 요소들이 있지만 자주 쓰이는 것은 col= 으로, 점의 색상을 결정한다.

이외에도 점의 모양을 결정하는 shape=, 점의 색상을 요소(factor)에 따라 변화하게 하는 aes(fill=), 점의 크기를 결정하는 size= 등이 쓰이는데 자세한 것은 여기를 참고하자.

geom_line()은 선을 긋는 함수이다. 마찬가지로 col=4라고 적음으로써 4번 색상인 파랑을 출력하고 있다. 자세한 디자인 요소 변경은 여기를 참고하자.

이번에는 또 다른 내장 데이터인 diamondsggplot2로 그려 보자.

diamonds 데이터의 형태

1
2
3
4
5
head(diamonds)
library(ggplot2)
ggplot(diamonds, aes(x=carat, y=price)) +
geom_point(aes(col=color)) + # point의 컬러(col)를 color라는 변수값에 따라 변하도록 설정
facet_grid(color ~ .) # ~을 사용한 format

ggplot()에서 x축 데이터를 carat열, 그리고 y축 데이터를 price열 로 설정하였다.

그리고 geom_point()로 점을 찍는데, 그 점들의 색상을 color열의 요소에 따라 달라지도록 지정하였다.

마지막으로, 새로운 함수가 하나 나타났는데 바로 facet_grid().

주로 집단(group) 간의 효과적인 비교를 위해 면을 분할하고 싶을 때 사용한다.

또한, 많은 경우 x ~ y와 같은 형태로 작성하는데, 이는 표현 그대로 좌측은 x (input), 우측은 y (output)을 의미하는 간략한 함수 형태이다.

위의 facet_grid(color ~ .)은 color에 따라 나머지 모든 데이터를 그룹화 하여 면을 분할 해서 표현하라는 의미로 해석된다. 참고는 여기

만약 facet_grid(. ~ color)로 쓴다면, 쉽게 말해서 x와 y가 반전되어 출력된다. (세로)





왼쪽은 facet_grid(color ~ .) 이고, 오른쪽은 facet_grid(. ~ color) 의 결과물이다. 위의 geom_point() 세팅에 따라, 점의 색상이 diamonds$color의 값에 따라 달라짐을 알 수 있다.

이어지는 포스트에서는 기본 plot외의 bar, histogram 등의 형태를 다루어 볼 것이다.

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