본문 바로가기

R_statistics/Rs_graphics

[R프로그래밍] 데이터시각화 with ggplot2::facet, 각각의 facet 에 annotation, text 넣기

늘 포스팅 주제는 바로 R graphics 의 꽃.

ggplot2 와 관련된 내용입니다.


그 중에서도 ggplot 에서 자주 쓰는 기능 중의 하나인 facet_grid 혹은 facet_wrap 을 사용하였을 때, 

각각의 facet 에 annotation 혹은 text 를 넣는 방법을 알아보겠습니다.


sample data 는 iris 를 사용할 예정이며, 

iris 의 data 의 Sepal.Length 와 Petal.Length 의 correlation 를 Species 로 구분하여 plotting 해보겠습니다.


일단 코드부터 살펴보겠습니다.


library(ggplot2)

r1<- by(iris, iris$Species, FUN = function(X) cor(X$Sepal.Length, X$Petal.Length, method="pearson", use="complete.obs"))
r1<- round(as.vector(r1),4)

data = data.frame(x=5.5,y=6.5, label=r1, Species=levels(iris$Species))

ggplot(iris, aes(Sepal.Length, Petal.Length))+
  geom_point(alpha=0.2)+
  stat_smooth(method="lm", color="red")+
  facet_wrap(.~Species)+
  geom_text(data = data, aes(x,y, label=paste("pearson's r = ", data$label)),
            inherit.aes = FALSE)+
  xlab("Sepal Length")+
  ylab("Petal Length")+
  #xlim()+
  theme_bw()


복잡해보이시는 분도 계시겠지만...위에서부터 차분하게 살펴보겠습니다.


1. ibrary에 ggplot 을 load 합니다.

2. r1 이라는 pearson's r 값을 갖는 vector 를 구성합니다.

3. data 라는 data.frame 을 만들겠습니다. 

 3-1. data 라는 data.frame 의 구성을 살펴보면, 

  3-1-1. x, y 는 text 를 넣은 x축과 y축 좌표를 의미합니다.

  3-1-2. label 은 Species 에 따른 pearson's r 값입니다.

  3-1-3. Species 는 iris 의 품종입니다. (facet 을 구분하는 변수와 이름을 똑같이 만들어주셔야 합니다.)

4. ggplot 을 그립니다.

 4-1. 12번째 줄을 보면, 새롭게 mapping 을 해주는 것을 알수 있습니다.

  4-1-1. data 라는 data.frame 을 사용하고 x,y 의 좌표를 정해주고, label로 text 를 적용시켜줍니다.

 4-2. 나머지 부분은 전체적인 그래프의 조정에 해당하겠습니다.


위의 코드로 만든 그래프는 아래와 같습니다.




각각의 Facet 에 annotation 을 넣는 방법을 몰라서 엄청 고민했던 기억이 나네요.

얼마나 구글을 돌아다녔는지 ㅎㅎ;


혹시라도 궁금하신 부분이 있으시다면 댓글달아주시면 아는 범위내에서는 최대한 답변해드리도록 하겠습니다. 

좋은 하루되세요^^


도움이 되셨다면, '공감' 버튼 부탁드립니다^^