ggplot의 geom함수, geometry에 대해서 알아보기

2019. 7. 6. 06:32

우연한 기회로 ggplot을 접하며 ggplot의 구조에 대해서 알아보고 있다. ggplot은 '그래프의 문법'이라는 책의 내용을 토대로 구성된 문법이다. 이전 포스팅에서는 aes에 대해서 알아보았다. ( 참조: ggplot 문법 알아보기, aes(aesthetic)이란? ) aes는 그래프의 요소들을 매핑하는 문법이라면, 실제 모양은 geom_...함수에서 결정한다.

오늘은 ggplot의 실제 그래프 모양인 geom함수에 대해서 알아보도록 하겠다.


ggplot2_geom



가. R Studio에서 'geom'을 입력하면 어떤 그래프들을 그릴 수 있는지 알 수 있다.

geom함수는 그래프의 모양을 결정하는 함수로 굉장히 많은 함수들이 있다. 모두 geom_ 으로 시작한다. R에서는 이렇게 접두어가 일치해야 R Studio에서 편리하게 사용할 수 있다. geom만 입력하면 자동완성기능으로 어떤 함수들이 있는지 알 수 있기 때문이다. tidyverse패키지가 모두 이런 형태로 작성이 되어 있다.


geom함수 중에 유용해 보이는 함수들을 적어보면 아래와 같다.

  - geom_bar: 바 그래프

  - geom_point: 산점도

  - geom_line: 라인 그래프

  - geom_count: 카운트 비교할 때 유용

  - geom_label: 그래프의 라벨을 텍스트로 표현할 때 유용

  - geom_errorbar: 신뢰구간을 나타내서 유용하지만, 그리려면 약간 어렵다.


* geom_errobar로 95% 신뢰구간 그리기

  geom_errorbar는 ymin과 ymax값을 넣어줘야 되는데, 값은 다 계산해서 넣어야 한다.


iris_summ <- iris %>% 

  group_by(Species) %>% 

  summarise(avg=mean(Sepal.Length), stdev=sd(Sepal.Length))


ggplot(iris_summ, aes(x=Species, y=avg)) +

  geom_bar(stat="identity", fill="grey50") +

  geom_errorbar(aes(ymin = avg-stdev, ymax = avg+stdev), width=0.2)



에러바

( 에러바 그리기 )



나. position이라는 매개변수를 통해 그래프를 조정할 수 있다. 사용가능한 posistion은 stack, identity, dodge, fill, jitter의 총 5개 이다. 좀 더 자세하게 살펴보면 아래와 간다.

  - stack: 바그래프에서 디폴트 셋팅으로 아래 그래프에 쌓아서 그린다. 

  - identity: 바그래프를 그릴 때 count가 아니라 y값으로 그리고 싶을 때 사용

  - dodge: 바그래프를 바로 옆에 붙여서 그린다.

  - fill; count가 아니라 백분윤을 기준으로 그린다.

  - jitter: geom_point를 사용할 때 점을 좌우로 분개해서 찍는다. (값이 같아서 모든 점을 한 곳에 찍으면 분포를 알기 어렵다.)


다. geom_함수 안에서 aes매핑이 가능하다. geom_함수를 사용하기 전에 보통 aes함수를 이용하여 x축, y축, data를 매핑한다. 하지만, geom함수 안에서도 매핑을 할 수 있다. 2가지의 그래프를 한 화면에 그릴 때 유용하다.


라. dplyr에서 데이터를 받아 그래프를 그릴 수도 있다. 데이터를 ETL하다가 이어서 그래프까지 그릴 수 있다. 예를 들면 아래와 같은 순이다. 



iris %>% 

  filter(Sepal.Width>0.5) %>% 

  ggplot(aes(Sepal.Width, fill=Species)) +

  geom_bar() +

  geom_errorbar()




오늘은 이렇게 ggplot의 geom함수에 대해서 알아보았다. geom함수까지만 알아도 그래프를 그리는데 크게 문제는 없다. 하지만 뒤에 다른 레이어들을 알면 더 유용하게 사용할 수 있다. 알아야 할 게 많지만, 중요한 건 꾸준한 연습인 것 같다.


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


댓글()