22.5 문자열 추가

이번 절에서는 낮은 수준의 그래프 함수 네번째로 text(x, y, labels, ...), mtext() 함수를 이용하여 문자열을 추가하는 방법에 대해서 학습하겠습니다.

그래프에 문자를 추가할 때 text() 함수와 mtext() 함수를 사용합니다. 차이점은 text()그래프 내에 문자열을 추가할 때 사용하는 반면, mtext()외부 마진 영역(1 하단, 2 좌측, 3 상단, 4 우측)에 문자를 추가할 때 사용한다는 것입니다.

text() 함수와 mtext() 함수의 일반적인 사용법은 아래와 같습니다.

함수 (function) 사용법 (usage)
text() text(x, y, labels = , pos = , ... )
mtext() mtext("text to place", side = , line = , adj, outer = , ... )
함수 옵션 기능 설명
text() x, y 문자를 추가할 위치의 x, y좌표.
단, x, y 좌표 대신에 locator(1) 을 입력하면
커서로 지적하는 곳에 문자를 추가함
labels = 추가할 문자
pos = 1 = 하단부
2 = 왼쪽
3 = 상단부(기본값)
4 = 오른쪽
좌표를 기준으로 문자를 입력할 상대적인 위치
... 폰트, 색깔, 크기 등의 그래프 모수 지정
mtext() 추가할 문자
side = 1 = 하단부
2 = 왼쪽
3 = 상단부(기본값)
4 = 오른쪽
문자를 추가할 위치
line = 0 ~ 문자와 그래프와의 마진 거리
adj = 0 : 왼쪽/아래쪽 정렬
1 : 위쪽/오른쪽 정렬
생략 : 중앙 정렬
outer = TRUE : 외부마진에 문자 추가
FALSE : 내부마진에 문자 추가
... 폰트, 색깔, 크기 등의 그래프 모수 지정

22.5.1 text() 함수의 사용

먼저 text() 함수를 사용하여 그래프 내에 문자열을 추가하는 방법을 살펴보도록 하겠습니다.

MASS 패키지에 내장되어있는 Cars93 데이터프레임의 차 무게 (Weight), 고속도로 연비 (MPG.highway) 변수를 활용해서 산점도를 그리고, 각 점에 해당하는 모델명을 모델명(Model) 변수의 텍스트로 추가해 보겠습니다.

library(MASS) 
##-------------------------------------------
## 플롯에 문자열 추가 : text(), mtext() 
##------------------------------------------- 
 
## 플롯에 문자열 추가 : text() 
attach(Cars93) 
## The following object is masked _by_ .GlobalEnv:
## 
##     Cylinders
plot(Weight, MPG.highway, main = "MPG.highway ~ Weight의 산점도") 
text(x = Weight, y = MPG.highway, labels = Model, pos = 3, cex = 0.5)

text(x, y, ) 좌표 대신에 text(locator(1), ) 옵션을 사용하면 대화방식으로 플롯 화면 상에 문자가 들어갈 위치를 마우스로 클릭해서 지정할 수 있습니다.

재현 가능성(reproducible research) 관점에서 보면 추천할 만한 방법은 아닙니다. 그러나, x, y 좌표를 정확히 모르거나, 한번만 간편하게 그래프를 그려볼 목적이라면 큰 문제는 없습니다.

# 텍스트가 들어갈 위치를 마우스로 선택하기 : locator(1) 
text(locator(1), labels = "연비가 낮음")
detach(Cars93)

22.5.2 mtext() 함수의 사용

다음으로 mtext() 를 사용해서 그래프 외부 마진 영역에 문자열을 추가해보는 예제입니다.

title() 함수로 제목을 추가하는 것과 유사한 측면이 있습니다. mtext()의 경우 여러 개의 그래프를 결합했을 때 외부마진에 그래프 전체의 제목을 자유롭게 추가할 수 있다는 유용한 장점이 있습니다.

library(MASS)
## 4개의 마진 중 한 곳에 문자열 추가하기 : mtext() 

# 기본 par 설정 값을 저장합니다.
op <- par(no.readonly = TRUE) 
 
# 1개 행에 2개의 그래프를 배치합니다.
par(mfrow = c(1,2),                                      # 1행 2개 플롯
    oma = c(2, 2, 4, 1))                                 # 외부 마진
 
attach(Cars93)
## The following object is masked _by_ .GlobalEnv:
## 
##     Cylinders
## The following objects are masked from Cars93 (pos = 3):
## 
##     AirBags, Cylinders, DriveTrain, EngineSize, Fuel.tank.capacity,
##     Horsepower, Length, Luggage.room, Make, Man.trans.avail,
##     Manufacturer, Max.Price, Min.Price, Model, MPG.city, MPG.highway,
##     Origin, Passengers, Price, Rear.seat.room, Rev.per.mile, RPM,
##     Turn.circle, Type, Weight, Wheelbase, Width
plot(Weight, MPG.highway, main = "MPG.highway ~ Weight")               # 그림 1 
plot(Horsepower, MPG.highway, main = "MPG.highway ~ Horsepower")       # 그림 2 
 
mtext("Weight, Horsepower와 MPG.Highway",   
       side = 3,                               # 문자열 위치 : 3 = 상단부
       line = 1,                               # 그래프와 문자열의 마진 거리 (0부터 시작)
       adj = 2,                                # 문자열 정렬 위치 : 가운데 정렬
       cex = 2,                                # 폰트 크기
       outer = TRUE)                           # TRUE : 외부 마진에 문자열 위치

detach(Cars93) 

# 원래의 par 설정값으로 환원
par(op)

위의 예에서 mtext() 함수 내의 side, line, adj, cex, outer 등의 설정값을 하나씩 수정하면서 연습해 보면 옵션 설정을 이해하는데 도움이 될 것입니다.