지난번 포스팅에서는 그래프에 추가적인 정보를 입력하는 낮은 수준의 그래프 함수(low level graphic functions) 중에서

(1) 제목, XY축 Label 추가하는 title()

(2) XY축의 형태를 변환하는 axis(side, ...)

(3) 직선 연결, 추가 : lines(x, y), abline(a, b), abline(h=y), abline(v=x)

(4) 점 추가 : points(x, y)

에 대해서 알아보았습니다.

 


이번 포스팅에서는 낮은 수준의 그래프 함수 네번째로 (5) 문자 추가 : text(x, y, labels, ...), mtext() 에 대해서 소개하겠습니다.



[ 낮은 수준의 그래프 함수 (Low level graphic function) ]

 

 

 

그래프에 문자를 추가할 때 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=below, 2=left, 3=above(default), 4=right

 ...

  폰트, 색깔, 크기 등의 그래프 모수 지정

 mtext()

 "text to place"

  추가할 문자

 side =

  문자를 추가할 위치

   : 1=bottom, 2=left, 3=top(default), 4=right

 line =

  문자와 그래프와의 마진 거리

  (to indicate the line in the margin starting with 0 and moving out)

 adj =

  adj=0 : 왼쪽/아래쪽 정렬,

  adj=1 : 위쪽/오른쪽 정렬,

  생략 : 중앙 정렬

  (adj=0 for left/bottom alignment or adj=1 for top/right alignment)

 outer =

  outer=TRUE : 외부마진에 문자 추가

  outer=FALSE : 내부마진에 문자 추가

 ...

  폰트, 색깔, 크기 등의 그래프 모수 지정

 

 

 

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

 

> ##-------------------------------------------
> ## adding text to the plot : text(), mtext()
> ##-------------------------------------------
> 
> ## adding text within a plot : text()
> library(MASS)
> attach(Cars93)
> str(Cars93)
'data.frame':	93 obs. of  27 variables:
 $ Manufacturer      : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ...
 $ Model             : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ...
 $ Type              : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ...
 $ Min.Price         : num  12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ...
 $ Price             : num  15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ...
 $ Max.Price         : num  18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ...
 $ MPG.city          : int  25 18 20 19 22 22 19 16 19 16 ...
 $ MPG.highway       : int  31 25 26 26 30 31 28 25 27 25 ...
 $ AirBags           : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ...
 $ DriveTrain        : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ...
 $ Cylinders         : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ...
 $ EngineSize        : num  1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ...
 $ Horsepower        : int  140 200 172 172 208 110 170 180 170 200 ...
 $ RPM               : int  6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ...
 $ Rev.per.mile      : int  2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ...
 $ Man.trans.avail   : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ...
 $ Fuel.tank.capacity: num  13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ...
 $ Passengers        : int  5 5 5 6 4 6 6 6 5 6 ...
 $ Length            : int  177 195 180 193 186 189 200 216 198 206 ...
 $ Wheelbase         : int  102 115 102 106 109 105 111 116 108 114 ...
 $ Width             : int  68 71 67 70 69 69 74 78 73 73 ...
 $ Turn.circle       : int  37 38 37 37 39 41 42 45 41 43 ...
 $ Rear.seat.room    : num  26.5 30 28 31 27 28 30.5 30.5 26.5 35 ...
 $ Luggage.room      : int  11 15 14 17 13 16 17 21 14 18 ...
 $ Weight            : int  2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ...
 $ Origin            : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ...
 $ Make              : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ...
> 
> plot(Weight, MPG.highway, main = "scatter plot of 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 좌표를 정확히 모르거나, 한번만 간편하게 그래프 그려서 볼 목적이라면 큰 문제는 없겠습니다.

 

 

> # placing text at the point of cursor : locator(1)
> text(locator(1), labels = "Low Mileage Per Gallon")
 

 

> detach(Cars93)

 

 

 

 

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

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

 

 

> ## places text in one of the four margins : mtext()
> 
> # Save default par values
> op <- par(no.readonly = TRUE)
> 
> # combining 2 graphs in 1 row
> par(mfrow = c(1,2), # 1 row, 2 windows
+     oma = c(2, 2, 4, 1)) # outer margin
> 
> 
> attach(Cars93)
> 
> plot(Weight, MPG.highway, main = "MPG.highway ~ Weight") # plot 1
> plot(Horsepower, MPG.highway, main = "MPG.highway ~ Horsepower") # plot 2
> 

 


> 
> mtext("MPG.highway by Weight, Horsepower", 
+       side = 3, # which margin to place text. 1=bottom, 2=left, 3=top, 4=right
+       line = 1, # to indicate the line in the margin starting with 0 and moving out
+       adj = 2, # adj=0 for left/bottom alignment or adj=1 for top/right alignment
+       cex = 2, # font size
+       outer = TRUE) # outer = TRUE : to place text at outer margin
>

 

 

> > detach(Cars93) > > # Reset par to the default values at startup > par(op)

 

 

다음번 포스팅에서는 범례(legend) 추가하는 방법에 대해서 알아보겠습니다.

 

많은 도움 되었기를 바랍니다.

 

이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^

 

Posted by R Friend R_Friend

댓글을 달아 주세요