R ggplot2 데이터 시각화하기

  • R

R의 유명한 시각화 패키지 ggplot2 사용 방법을 알아보려 한다.

물론 base R을 사용해도 간단한 시각화는 가능하지만, 결국엔 ggplot2를 써야 제대로 할 수 있다. 다들 이걸 쓰는 이유가 있으니 일단 익혀보자.


Grammar of Graphics

일단 ggplot2의 철학(?)을 알아야 한다.

gggrammar of graphics의 약자다. 그래픽 문법.

그리고 이 문법은 다음과 같은 요소를 갖고 있다.

  • data : 시각화하려는 데이터 또는 실제 정보를 의미한다.
  • geometries : (줄여서 ‘geoms‘로 쓰기도 하는데) 데이터를 표현하는 도형을 의미한다. 산점도의 점, 그래프의 막대나 선 같은 거. 데이터를 “매핑”하는 모양이라 할 수 있다.
  • aesthetics : 축의 스케일, 색상, 채우기 등 미학적/시각적 속성을 의미한다.

이 세 가지 요소 외에도 layer의 개념을 기억하면 좋다. ggplot2는 빈 캔버스에 geoms을 추가하고, 다른 요소들을 레이어로 얹어서 플롯을 완성하는 방식이기 때문에.


ggplot() 호출하기

ggplot 객체를 생성하기 위해 패키지를 불러와서 ggplot() 함수부터 호출하자.

library(ggplot2)

viz <- ggplot(data=df)

시각화를 위해 캔버스를 초기화해서 viz라는 변수에 담아놓은 것이라 생각하면 된다.

일단 캔버스에 담을 데이터를 준비만 해놓은 거고, 이후에 각각의 정보를 표시하거나 스타일을 입히기 위해 레이어를 얹을 거다.


데이터 연결하고 레이어 추가하기

ggplot() 함수로 준비를 해놨으면 이제는 + 기호를 사용해서 레이어를 얹으면 된다. 그리고 이 때 추가되는 레이어들은 모두 데이터프레임의 열 이름을 변수로 사용할 수 있다.

아래와 같은 방식으로 사용한다.

viz <- ggplot(data=sales) + 
       geom_point(aes(x=cost, y=profit))

sales라는 데이터프레임을 가져왔고, x, y 축을 각각 cost와 profit로 지닌 geom_point() 레이어를 입힌 거다.

여기서 aes는 위에서 소개한 aesthetics다. 좀 더 자세히 알아보자.


Aesthetics & Geoms

aesthetics는 플롯에 나타나는 도형이나 시각적 속성을 결정한다. x축과 y 축의 스케일, 플롯의 색상, 도형의 크기나 모양과 같은 것들이 포함된다.

ggplot() 함수를 호출할 때, 즉 캔버스 단계에서 aes를 설정하면 이 속성들은 이후에 추가되는 레이어에 공유된다.

viz <- ggplot(data=sales, aes(x=cost, y=profit)) +
       geom_point() + 
       geom_smooth()

그리고 이후에 추가된 geom_point(), geom_smooth()와 같은 geoms들이 바로 레이어가 된다. 어떤 모양새로 플롯을 그릴지 결정하는 건데 워낙 종류가 많으니 자세한 내용은 ggplot2 documentation을 참고하자.

※ Geom Aesthetics

때로는 개별 레이어에 고유한 aes 설정이 필요하다. 예를 들어 geom_point()를 통해 산점도를 그렸는데, 각 데이터의 다른 속성을 기준으로 점들을 분류해서 다르게 나타내야 한다든가 하는 그런 상황에.

예를 들어 airquality라는 데이터프레임에서 오존, 온도를 각각 x, y축으로 가지도록 미리 데이터를 매핑해놓고 산점도를 그리는데, 이때 산점도에서 각 점을 월별로 구분을 하고 싶다면 아래와 같이 color를 지정할 수 있다.

viz <- ggplot(data=airquality, aes(x=Ozone, y=Temp)) +
       geom_point(aes(color=Month)) + 
       geom_smooth()

viz

산점도, 즉 geom_point() 내에서 aes를 지정한 거라, geom_smooth()에는 영향을 미치지 않는다.

geom의 종류에 따라 설정 가능한 aes가 다른 경우도 있기 때문에 ggplot2 documentation을 읽어보고 필요한 내용을 가져다 쓰는 게 좋다.

당연히 세부적인 설정도 다 가능하다. geom_point()의 경우 x, y, color 뿐만 아니라 alpha, fill, group, shape, size, stroke 등 세세한 걸 다 만질 수도 있다. 예를 들어 투명도(alpha)를 0.5로 설정하려면 이렇게.

viz <- ggplot(data=airquality, aes(x=Ozone, y=Temp)) +
       geom_point(aes(color=Month), alpha=0.5) + 
       geom_smooth()

Labels

시각화된 플롯에 x, y축 레이블뿐만 아니라 title, subtitle, caption 같은 걸 친절하게 적어줄 필요도 있겠지.

그럴 땐 labs() 함수를 활용해서 적어주면 된다. 이렇게.

viz <- ggplot(data=movies, aes(x=imdbRating, y=nrOfWins)) +
       geom_point(aes(color=nrOfGenre), alpha=0.5) +
       labs(title="Movie Ratings Vs Award Wins", subtitle="From IMDB dataset", x="Movie Rating", y="Number of Award Wins", color="Number of Genre")

viz

역시나 좀 더 세세한 설정을 알고 싶다면 공식 documentation을 참고하자. 언제나 공식 문서에 답이 있다.


저장하기

그림을 로컬에 저장할 땐 ggsave() 함수를 사용해서 파일명을 적어주면 된다.

막대 그래프를 하나 그려서 저장해보자. 참고로 막대 그래프 geom_bar()는 x축으로 범주형 데이터를 넣어주면 알아서 count를 해서 막대로 표현해준다.

viz <- ggplot(df, aes(x=Language)) + geom_bar()
viz

저장하려면 이어서 이렇게만 써주면 끝이다.

ggsave("bar-example.png")

일단 여기까지~

ggplot2로 데이터 시각화하는 기초적인 방법은 얼추 소개가 된 것 같다. 이제 본인이 가진 데이터로 직접 그려보는 일만 남았다. 그리다 보면 결국엔 세세한 설정이 필요할 텐데 언제나 그렇듯 공식 문서에 그 답이 있을 거다.

데이터 시각화는 ggplot2으로

파이썬으로 할 때보다 더 쉬운 거 같은데 기분 탓인가?

지금 인기 글


댓글 남기기