21.1 그래프 모수 설정하는 2가지 방법

출처: https://rfriend.tistory.com/148

이전 포스팅에서 Base Graphics plotting system에서 그래프의 기본 골격을 생성하는 높은 수준의 그래프 함수 (High Level Graphics Function)에 대해서 알아보았습니다.

이번 포스팅에서는 그래프의 기호, 선, 색깔, 마진, 영역 분할그래프의 세부적인 옵션들을 설정하는 방법으로 ‘그래프 모수 (Graphical Parameters)’ 에 대해서 소개하겠습니다.

그래프 모수에는 약 70여가지가 있는데요, 포스팅에서 전부 다루기에는 무리가 있어서 활용 빈도가 높다고 생각하는 항목들만을 선별해서 소개하겠습니다. R의 콘솔 창에 ‘**?par**’ 라고 입력하면 graphical parameter setting 관련한 도움말을 참고할 수 있습니다.

그래프 모수를 설정하는 방법에는 2가지가 있습니다.

  • 첫번째 방법은 par() 함수를 이용해서 이후에 생성하는 그래프 전체에 일괄적으로 동일하게 모수를 적용하는 방법입니다 (전역 환경 설정). 동일한 모수 설정치로 다수의 그래프를 그려야 하는 상황이라면 편리하게 사용할 수 있는 방법입니다. 일부 그래프 모수는 이 첫 번째 방법으로만 설정할 수 있습니다. (예: 영역분할을 위한 mfrow() 함수)

  • 두번째 방법은 그래프를 그릴 때마다 매번 사용하는 함수 내에서 그래프 모수를 일일이 지정해 주는 방법입니다. 그래프를 한 두 개만 그리거나, 다수의 그래프를 그려야 하는데 모수 설정치가 매번 다르다면 두번째 방법을 사용하는게 편하겠습니다.

21.1.1 par() 함수 설정

par() 함수는 그래프의 모양을 다양하게 조절할 수 있는 그래프 모수들을 설정하고 조회하는 함수입니다.

모수 설 명
mfrow / mfcol mfrow : 그래프를 행 우선 배치합니다. 기본값은 c(1,1) 입니다.
mfcol : 그래프를 열 우선 배치합니다. 기본값은 c(1,1) 입니다.
한 화면에서 여러 그래프를 비교할 때 사용합니다.
figure region을 나누어 plot region을 만들고 배치 순서를 정하는 인수.
fig 기본값은 c(0, 1, 0, 1) 입니다. 분할된 영역의 크기와 위치를 지정합니다.
복잡하게 분할할 경우 네 개의 인수를 일일이 계산해야 하므로 layout() 등 타 함수를 쓰는 게 좋습니다.
new 기본 값은 FALSE 입니다. 이는 현재 figure region을 초기화하고 새로운 그래프를 그립니다.
TRUE로 설정하면 화면 분할 없이 그래프 하나만 쓸 때, 이전 결과에 겹쳐서 새 결과를 출력합니다.
새로운 그래픽 함수 호출 시, figure region을 초기화할 것인지를 설정합니다.
두 개 이상의 그래픽 함수를 한 figure region에 나타낼 때 주로 사용합니다.
type “p” - points. 점
“l” - line. 선
“b” - both points and lines. 점과 선
“c” - empty points joind by lines. 점이 빠진 선
“o” - overplotted p 와 l. 겹친 점과 선
“s”나“S” - stair steps. 계단 모양
“h” - histogram-like vertical lines. 수직선
좌표 영역에 데이터를 출력하는 형태를 지정합니다.
mar 기본 값은 c(5,4,4,2) + 0.1 plot margin. 여백을 지정합니다.
oma outer margin. 외부 여백을 지정합니다.
pty “s”(square, x축과 y축 스케일(비율)이 동일하게)
“m”(maximal, 최대 크기로)
plot type. plot region의 모양을 지정합니다.
bty “o” (기본 값)
“l”
“7”
“c”
“u”
“]” 글자와 닮은 형태..
box type. plot region 둘레의 상자 모양을 지정합니다.
pch 기본 값은 1 point character. 점의 모양을 지정합니다.
cex 기본 값은 1 character expansion. 문자나 점의 크기를 지정합니다.
lty 기본 값은 “solid”(1) line type. 선의 모양을 지정합니다.
col 1~8까지 정해진 색깔이 있습니다.
“#RRGGBB” 형식으로 색상을 지정할 수 있습니다.
“beige,” “aquamarine” 등 이름으로 색상을 지정할 수 있습니다.
color. 색상을 지정합니다.
str 기본 값은 0. (단위 degree, 음수도 사용 가능.)
text() 함수에서 사용가능합니다.
string rotation. 문자열을 회전합니다.
family “sans,”“serif,”“mono” 등 문자의 폰트 종류를 지정합니다.
font “plain”=1, “bold”=2, “italic”=3, “bold italic”=4, “symbol”=5 폰트 체를 지정합니다.
fg 기본 값은 “black”입니다. 그래프의 테두리 색을 지정합니다.
bg 기본 값은 “transparent”(투명)입니다. 그래프 기호의 배경색을 지정합니다.
tck tick marks. 좌표 눈금선의 길이를 지정합니다.
plot region의 크기를 기준으로 값이 계산됩니다.
tcl cex=1일 때 문자의 길이를 tcl=1로 하여 값이 계산됩니다. tick length. 좌표 눈금선의 길이를 지정합니다.

아래에 첫번째 방법으로 par() 함수를 이용해서 그래프 모수를 설정하는 예를 살펴보겠습니다.

MASS 패키지에 내장되어 있는 Cars93 데이터프레임의 차 무게(Weight)와 마력(Horsepower)과 고속도로연비(MPG.highway) 간의 관계를 알아보기 위해 산점도를 그려본 예제입니다.

## par() 함수를 이용하여 그래프 함수의 모수를 지정할 수 있습니다.
# help on par() function : ? par()
  
library(MASS) 
# to use Cars93 dataframe 
 
# method 1 : par() 
# 원래의 그래프 모수 설정을 저장합니다.
par_origin <- par(no.readonly = TRUE) 
 
# 새로운 그래프 모수를 설정합니다.
par(pch = 15, col = "blue") 

# 산점도를 작성합니다.
plot(MPG.highway ~ Weight, type = "p", Cars93)

plot(MPG.highway ~ Horsepower, type = "p", Cars93) 

# 원래의 그래프 모수 설정으로 돌아갑니다.
par(par_origin) 
plot(MPG.highway ~ Weight, Cars93)              # plot() 함수의 모수들에 기본값이 적용됩니다.

par() 함수를 사용해서 전역 환경에 그래프 모수를 설정할 때는 나중에 디폴트 그래프 모수로 돌아와야 하는 상황에서 편리하게 사용할 수 있도록 par(no.readonly = TRUE)par_origin 이라는 개체에 할당해서 저장해 두었다가, 그래프를 다 작서한 다음 제일 마지막에 par(par_origin)로 원래의 그래프 모수로 돌아 왔습니다.

21.1.2 행/열 별로 표시할 그래프 수 지정

mfrow,mfcol모수는 그래픽 장치에 영역을 분할하여 플롯의 배치 순서를 정합니다. 한 화면에 여러 개의 그래프를 그려서 그래프들을 비교하는 경우에 유용하게 이용할 수 있다. 앞의 예를 mfrow 모수를 이용하여 1줄에 2개의 그래프를 그려 보겠습니다.

library(MASS)

# par() 함수에 mfrow = c(1,2) 값을 모수로 지정하여 화면을 분할합니다. (1행, 2열로 그래프 표시)
par(mfrow = c(1,2))

# 원래의 그래프 모수 설정을 저장합니다.
par_origin <- par(no.readonly = TRUE) 

# 새로운 그래프 모수를 설정합니다.
par(pch = 15, col = "blue") 

# 산점도를 작성합니다.
plot(MPG.highway ~ Weight, type = "p", Cars93)
plot(MPG.highway ~ Horsepower, type = "p", Cars93) 

# 원래의 그래프 모수 설정으로 돌아갑니다.
par(par_origin) 

# 분할된 화면을 원상 복구합니다.
par(mfrow = c(1,1))

# 산점도를 작성합니다.
plot(MPG.highway ~ Weight, type = "p", Cars93)

plot(MPG.highway ~ Horsepower, type = "p", Cars93) 

21.1.3 개별 그래프 함수마다 그래프 모수를 설정하는 방법

두번째로 개별 그래프마다 그래프 모수를 설정하는 방법을 예로 들어보겠습니다. 그래프 결과는 위에서 par()로 그래프 모수 설정했을 때와 동일함을 알 수 있습니다. 그래프를 그려야 하는 상황에 가장 편리한 방법을 선택해서 사용하면 되겠습니다.

## 그래프 모수를 그래프 함수별로 개별적으로 설정할 수 있습니다.

plot(MPG.highway ~ Horsepower, type = "p",             # 데이터를 점(p)로 출력합니다.
     pch = 15,                                         # 점의 모양입니다.
     col = "blue",                                     # 점의 색을 지정합니다.
     data = Cars93)                                    # 데이터를 지정합니다.

plot(MPG.highway ~ Weight, type = "p",                 # 데이터를 점(p)로 출력합니다.     
     pch = 21,                                         # 점의 모양(21:속이 빈 동그란 점)으로 지정합니다.
     col = "blue",                                     # 동그란 점의 테두리를 파랑색으로 채웁니다.
     data = Cars93)                                    # 데이터를 지정합니다.

21.1.4 현재 그래프 모수 확인 (checking current graphical parameter settings) : par()

참고로, par() 함수를 쓰면 현재의 그래프 모수를 확인해볼 수 있습니다. 갯수를 세어보니 총 72개 graphical parameter 가 있네요.

#  현재 설정되어 있는 그래프의 모수는 par() 함수로 확인할 수 있습니다.
par()
## $xlog
## [1] FALSE
## 
## $ylog
## [1] FALSE
## 
## $adj
## [1] 0.5
## 
## $ann
## [1] TRUE
## 
## $ask
## [1] FALSE
## 
## $bg
## [1] "white"
## 
## $bty
## [1] "o"
## 
## $cex
## [1] 1
## 
## $cex.axis
## [1] 1
## 
## $cex.lab
## [1] 1
## 
## $cex.main
## [1] 1.2
## 
## $cex.sub
## [1] 1
## 
## $cin
## [1] 0.15 0.20
## 
## $col
## [1] "black"
## 
## $col.axis
## [1] "black"
## 
## $col.lab
## [1] "black"
## 
## $col.main
## [1] "black"
## 
## $col.sub
## [1] "black"
## 
## $cra
## [1] 28.8 38.4
## 
## $crt
## [1] 0
## 
## $csi
## [1] 0.2
## 
## $cxy
## [1] 0.02604167 0.06329115
## 
## $din
## [1] 6.999999 4.999999
## 
## $err
## [1] 0
## 
## $family
## [1] ""
## 
## $fg
## [1] "black"
## 
## $fig
## [1] 0 1 0 1
## 
## $fin
## [1] 6.999999 4.999999
## 
## $font
## [1] 1
## 
## $font.axis
## [1] 1
## 
## $font.lab
## [1] 1
## 
## $font.main
## [1] 2
## 
## $font.sub
## [1] 1
## 
## $lab
## [1] 5 5 7
## 
## $las
## [1] 0
## 
## $lend
## [1] "round"
## 
## $lheight
## [1] 1
## 
## $ljoin
## [1] "round"
## 
## $lmitre
## [1] 10
## 
## $lty
## [1] "solid"
## 
## $lwd
## [1] 1
## 
## $mai
## [1] 1.02 0.82 0.82 0.42
## 
## $mar
## [1] 5.1 4.1 4.1 2.1
## 
## $mex
## [1] 1
## 
## $mfcol
## [1] 1 1
## 
## $mfg
## [1] 1 1 1 1
## 
## $mfrow
## [1] 1 1
## 
## $mgp
## [1] 3 1 0
## 
## $mkh
## [1] 0.001
## 
## $new
## [1] FALSE
## 
## $oma
## [1] 0 0 0 0
## 
## $omd
## [1] 0 1 0 1
## 
## $omi
## [1] 0 0 0 0
## 
## $page
## [1] TRUE
## 
## $pch
## [1] 1
## 
## $pin
## [1] 5.759999 3.159999
## 
## $plt
## [1] 0.1171429 0.9400000 0.2040000 0.8360000
## 
## $ps
## [1] 12
## 
## $pty
## [1] "m"
## 
## $smo
## [1] 1
## 
## $srt
## [1] 0
## 
## $tck
## [1] NA
## 
## $tcl
## [1] -0.5
## 
## $usr
## [1] 0 1 0 1
## 
## $xaxp
## [1] 0 1 5
## 
## $xaxs
## [1] "r"
## 
## $xaxt
## [1] "s"
## 
## $xpd
## [1] FALSE
## 
## $yaxp
## [1] 0 1 5
## 
## $yaxs
## [1] "r"
## 
## $yaxt
## [1] "s"
## 
## $ylbias
## [1] 0.2