이전 포스팅에서 하나의 그래프에 텍스트, 선, 화살표, 음영있는 사각형 등으로 부연 설명을 추가하기 위해 annotate() 함수로 주석을 추가하는 방법을 소개하였습니다.
이번에는 facet_grid() 로 특정 범주형 변수에 의해 요인(factor)별로 면 분할된 그래프에 각각 주석을 넣는 넣기 위해 geom_text() 함수를 사용하는 방법에 대해 알아보겠습니다.
예제로 사용할 데이터는 iris 데이터프레임 내 Petal.Width, Petal.Length, Species 의 3개 변수를 사용하겠습니다.
> str(iris) 'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ... |
ggplot2는 별도의 설치 및 호출이 필요한 패키지이므로 아래의 절차를 먼저 따르기 바랍니다.
> install.packages("ggplot2") Installing package into ‘C:/Users/user/Documents/R/win-library/3.2’ (as ‘lib’ is unspecified) trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.2/ggplot2_1.0.1.zip' Content type 'application/zip' length 2676992 bytes (2.6 MB) downloaded 2.6 MB package ‘ggplot2’ successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\user\AppData\Local\Temp\Rtmp0CW98B\downloaded_packages > library(ggplot2) |
먼저, 지난번 포스팅에서 소개드렸던, 하나의 화면에 품종별로 색깔을 구분해서 그리고, annotate() 함수를 사용해서 텍스트 주석(text annotation) 하는 방법을 아래에 복습해 보겠습니다.
> # 하나의 화면에 품종별로 색깔 구분해서 그리기 : aes(fill=categorical var) > a1 <- ggplot(iris, aes(x=Petal.Width, y=Petal.Length, fill=Species)) + + geom_point(colour="grey", shape=21, size=6) + + scale_fill_brewer(palette="Reds") + + annotate("text", x=0.25, y=2.4, label="Setosa", size=7) + # text annotation + annotate("text", x=1.3, y=3.3, label="Versicolor", size=7) + + annotate("text", x=1.7, y=6.8, label="Virginica", size=7) > > a1
|
이걸 품종(Species)을 기준으로 면 분할 (facet_grid(.~Species) ) 하면 아래와 같습니다. 이번 포스팅에서는 아래 처럼 면 분할 된 상태의 그래프에 주석 추가하는 방법입니다.
> # 품종별로 면 분할하여 색깔 구분없이 그리기 : facet_grid(.~categorical var) > g1 <- ggplot(iris, aes(x=Petal.Width, y=Petal.Length)) + + geom_point(colour="blue", shape=19, size=4) + + facet_grid(.~Species) > > g1
|
범주형 변수의 요인(factor)별로 면 분할된 상태의 그래프에 텍스트 주석을 넣으려고 아래와 같이 하면 라벨 길이가 다르다면서 에러가 납니다.
> # 텍스트 라벨 넣으려면 에러 발생 > # Error: Incompatible lengths for set aesthetics: label > g1 + + annotate("text", x=1, y=7, label=c("Setosa", "Versicolor", "Virginica")) Error: Incompatible lengths for set aesthetics: label
|
범주형 변수의 요인(factor)별로 면 분할된 상태의 그래프에 텍스트 주석을 넣으려고 하려면 annotate() 함수로는 안되구요, 라벨을 넣으려는 내용을 데이터프레임으로 미리 만들어놓고 geom_text()로 라벨을 집어넣어야 합니다. 아래 예제는 Species 이름을 각 각 텍스트로 넣어보는 예입니다.
|
다음으로 각 품종(Species)별로 x축 Petal.Width와 y축 Petal.Length 평균을 구해서 중심 좌표 (centroid)를 텍스트로 주석을 추가해보겠습니다.
먼저, sqldf 패키지를 새로 설치해서 x축 Petal.Width와 y축 Petal.Length 평균을 구해보겠습니다.
|
다음으로 centroid 정보를 그래프에 분할된 면에 따라 각각 추가해보겠습니다.
> # x, y 평균 좌표 추가 : geom_text() > g3 <- g2 + + geom_text(x=1, y=6, aes(label=centroid), data=label_mean_iris) > > g3
|
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^