본문으로 바로가기



ggplot2 패키지 정리 - 1. stat_density, stat_function, geom_rug, geom_point, anotate, labs

category R Programming/Graphics 2017.07.11 15:39
ggplot2 패키지 정리 - 1. stat_density, stat_function, geom_rug, geom_point, anotate, labs

이번 포스팅에서 사용될 R 패키지는 다음과 같다.

library(RColorBrewer)
library(magrittr)
library(ggplot2)

이번 포스팅에서는 필자의 개인 참고를 위하여 최근 필자가 사용했던 ggplot2의 코드들을 정리해놓으려 한다.

RColorBrewer

최근 필자가 RColorBrewer의 위력을 실감하였다. 패키지가 하는 일은 아주 간단하다. 색깔을 선택해준다.

  1. 사용법
# pick 5 colors with theme: "Accent"
display.brewer.pal(5, "Accent")

my_color <- brewer.pal(5, "Accent")
my_color
## [1] "#7FC97F" "#BEAED4" "#FDC086" "#FFFF99" "#386CB0"

Accent는 팔렛트 이름이다. 다음은 사용 가능한 팔래트들의 이름과 색깔 갯수이다.

  1. Accent 8
  2. Dark2 8
  3. Paired 12
  4. Pastel1 9, Pastel2 8
  5. Set1 9, Set2 8, Set3 12

골라진 5개의 색상은 서로 다 어울리는 색이라서 그래프 그릴때 골라서 사용하면된다.

데이터와 그래프 오브젝트

ggplot의 경우 데이터를 기반으로 하는 오브젝트를 만들고, 그 위에 + 연산자를 사용하여 여러 개의 레이어를 겹쳐서 그래프를 그리는 개념을 채택하고 있다. 필자의 경우 이 기반 오브젝트를 p라고 정의하겠다. 또한 그래프에 사용되는 데이터는 data.frame을 채택하므로, 정규분포에서 샘플을 추출 후 데이터 프레임으로 자료형을 변환시킨다. 보여줄 범위 지정은 xlim과 ylim을 사용하여 지정하고, x축과 y축 추가는 geom_hline과 geom_vline을 사용한다.

set.seed(2017)
my_sample <- rnorm(300, mean = 0, sd = 1)
p <- ggplot(data = as.data.frame(my_sample)) +
     geom_hline(yintercept=0) + geom_vline(xintercept=0) +
     xlim(-3.5, 3.5) # + ylim(a, b)
p

ggplot2의 유용한 함수들

stat_density

데이터를 기반으로 density function을 그려준다. ggplot2에서는 맵핑이라는 개념이 존재하는데 x축과 y축에 어떠한 데이터를 연결시킬 것인지에 대한 설정을 할 수 있다. 이때 aes 함수를 사용해서 한다. stat_density는 x축의 데이터만을 기준으로 계산을 하므로 x축 맵핑만 하면된다. fill은 추정된 밀도함수 안의 영역에 대한 샐깔 설정이 들어가고, alpha의 경우는 ’투명도’를 조절한다.

p <- p + stat_density(mapping = aes(x = my_sample),
                      fill = my_color[1], alpha = 0.3)
p

geom_rug

밀도함수 그래프를 그릴때 유용한 기능은 그래프 밑에 실제 데이터가 어떻게 분포하고 있는지를 같이 그려주는 것이다. 이것은 geom_rug를 사용하여 구현한다.

p <- p + geom_rug(aes(x = my_sample, y = 0),
                  position = position_jitter(height = 0),
                  color = my_color[3]) + theme_light()
p

stat_function

stat_function은 이미 정의된 연속형 함수를 그릴때 유용하다.

stat_function에 그리고 싶은 함수를 fun에 feed, 함수에 들어가는 모수값을 args에 리스트 형식으로 피드한다. size는 선의 굵기를 조절함.

p <- p + stat_function(fun = dnorm,
                      args = list(mean = 0, sd = 1),
                      color= my_color[5],
                      size = 0.7)
p

geom_point

그래프 상에 점을 찍고 싶을 때는 geom_point를 이용한다.

x_positions <- c(-1, 0.5)
my_points <- data.frame(x_pos = x_positions,
                        y_pos = dnorm(x_positions, mean = 0, sd = 1))
p <- p + geom_point(data = my_points,
                    mapping = aes(x = x_pos, y = y_pos),
                    color = my_color[4])
p

annotate

그래프 상에 텍스트를 넣고 싶은 경우에는 annotate 함수를 이용한다. annotate 함수도 다른 함수들과 마찬가지로 한번에 여러 값들을 처리할 수 있다.

p <- p + annotate("text",
         x = x_positions + 0.5,
         y = dnorm(x_positions) + 0.02,
         label = dnorm(x_positions) %>% round(digits=3))
p

기타 설정

  1. 그래프 제목, 축제목 등은 labs함수로 다 적용가능하다.
p <- p  + labs(title = "pdf of normal distribution",
               subtitle = "mean 0 and sd 1",
               x = "x", y = "dnorm",
               caption = "Fig 1. dnorm values at x = -1, 0.5")
p

  1. theme_ 으로 시작하는 함수를 사용해서 그래프의 전체적 테마를 적용할 수 있다. 선택할 수 있는 theme들은 다음과 같다. 필자의 경우는 theme_light()을 주로 사용하는 편이다.
# p + theme_grey()
# p + theme_gray()
# p + theme_bw()
# p + theme_linedraw()
# p + theme_dark()
# p + theme_minimal()
# p + theme_classic()
# p + theme_void()
p + theme_light()



SHARE TO



티스토리 툴바