늘 포스팅 주제는 바로 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 을 넣는 방법을 몰라서 엄청 고민했던 기억이 나네요.
얼마나 구글을 돌아다녔는지 ㅎㅎ;
혹시라도 궁금하신 부분이 있으시다면 댓글달아주시면 아는 범위내에서는 최대한 답변해드리도록 하겠습니다.
좋은 하루되세요^^
도움이 되셨다면, '공감' 버튼 부탁드립니다^^