ggplot 문법 알아보기, aes(aesthetic)이란?

2019. 7. 2. 06:00

R을 이용하는 사람들은 ggplot을 많이 이용한다는 애기는 들어봤다. 하지만, 직접 사용해볼 기회는 별로 없었다. 기존의 그래프 문법과 많이 달라 어색하기도 하고 손에 익지 않기 때문이다. 그러다 우연한 계기로 ggplot에 대해 알아볼 기회가 생겼다. 실제로 사용해보고 알아보니 굉장히 직관적이고 편리한 문법을 가지고 있다는 것을 알게 되었다.

오늘은 ggplot의 문법 중 하나는 aes(aesthetic)에 대해서 알아보도록 하겠다.


ggplolt_aes



이전 포스팅에서 ggplot의 전체적인 구조에 대해서 알아보았다. ( 참조: ggplot의 그래프 구조와 문법 알아보기 ) aes는 그래프의 미적(?)인 부분으로 x축, y축, 칼러 등 그래프가 안에 어떻게 생겼는지를 제외한 모습을 지정할 수 있다. 지정할 수 있는 요소들은 아래와 같다.


  1) x: X축 

  2) y: Y축

  3) color: 그래프의 색깔, 모양일 경우 테두리

  4) fill: 채우는 색깔

  5) size: 라이읜 굵기 또는 점의 크기

  6) alpha: 투명도 

  7) linetype: 선 패턴

  8) labels: 표나 축의 텍스트


위와 같은 요소들에 매핑하는 것이다. 그래서 aes함수를 쓸 때는 아래와 같이 'map='이라고 작성하지만, 생략해도 된다. fill과 color가 많이 헷갈렸는데 이번에 명확히 알게 됐다. color는 테두리 색깔을 말하고, fill은 안에 채우는 색깔을 말한다.


 ggplot(iris, map=aes(Sepal.Length, Sepal.Width, color=Species)) + geom_point()


그래프1

( 그래프1)


각각의 요소들은 위와 같이 입력하면 자동으로 지정이 된다. 일부는 연속형인지 범주형인지에 따라 적용이 되기도 하고 안 되기도 한다. 자동으로 지정되는 것이 아니라 각각의 요소들을 변경할 수도 있다.



축에 대한 내용들을 직접 지정하려면 Scale함수를 사용한다. 연속형인지 범주형인지에 따라 여러가지 함수가 있다. scale_x_continuous는 연속형 변수인 경우 x축을 지정하는 것이고, scale_x_discrete는 범주형 변수일 때 x축을 지정하는 것이다.


  * sale_x_...

  * scale_y...

  * scale_color...

  * scale_fill...

  * scale_color...

  * scale_shape...

  * scale_linetype...


사용방법은 아래와 같다. x축이 연속형인 경우 scale_x_continuous를 사용하고 limits는 x축의 크기, breks는 일정 구간마다 표시할 값, expand는 좌우여백을 얼마나 사용할지를 말한다. 빼고도 그려보고 넣어서도 그려보면 차이를 알 수 있다.


  ggplot(iris, map=aes(Sepal.Length, Sepal.Width, color=Species)) + 

    geom_point(position="jitter") +

    scale_x_continuous("Sepal Length", limits=c(2,8), breaks=seq(2,8,3), expand = c(0, 0)) +

    scale_color_discrete("Species", labels=c("S","V","Virginica"))


산점도

( 그래프2 )


각각의 라벨을 변경하는 것은 labs라는 함수를 사용할 수도 있다.


ggplot(iris, map=aes(Sepal.Length, Sepal.Width, color=Species)) + 

  geom_point() +

  labs(x="x", y="y", color="col", title="hahaha")



오늘은 이렇게 ggplot의 문법 중 하나인 aes(aesthetic)에 대해서 알아보았다. 각각의 요소를 직접 지정하는 것은 조금 번거럽지만, 기본 매핑만으로도 상당히 훌륭한 그래프를 그릴 수 있었다. 사용할수록 좋은 문법이라는 생각이 든다.


몇 가지 팁이나 방법을 알면 R을 더 효율적으로 코딩할 수 있는 방법들이 있다. 자세한 내용이 궁금하다면, 아래 링크를 참조해보자.
( 참조: R 효율적인 코딩팁과 방법들 )

댓글()