πŸ“ˆ [R] 데이터 μ‹œκ°ν™” - par() ν•¨μˆ˜ - 1

thisk336Β·2023λ…„ 9μ›” 9일
0

R

λͺ©λ‘ 보기
5/6
post-thumbnail

par() ν•¨μˆ˜

ν”Œλ‘―μ„ 좜λ ₯ν•˜λŠ” κ·Έλž˜ν”½ μž₯μΉ˜λŠ” μ—¬λŸ¬ 가지 κ·Έλž˜ν”½ 인수λ₯Ό 가지고 μžˆλ‹€. κ·Έλž˜ν”½ μΈμˆ˜λŠ” κ·Έλž˜ν”½ 속성을 μ •μ˜ν•œ κ°’μœΌλ‘œ, ν™”λ©΄μ˜ λΆ„ν•  방법 및 λ§ˆμ§„, κΈ€μžμ˜ 크기 및 색상 λ“±μ˜ μ„€μ • 값이닀. κ·ΈλŸ¬λ―€λ‘œ κ·Έλž˜ν”½ 인수의 μ„€μ •μœΌλ‘œ ν”Œλ‘―μ˜ λͺ¨μ–‘κ³Ό κ·Έλž˜ν”½ ν™˜κ²½μ„ λ‹€μ–‘ν•˜κ²Œ μ‘°μ •ν•  수 μžˆλ‹€. par() ν•¨μˆ˜λŠ” κ·Έλž˜ν”½ 인수λ₯Ό μ‘°νšŒν•˜κ±°λ‚˜ μ„€μ •ν•˜λŠ”λ° μ‚¬μš©ν•œλ‹€.

mfrow, mfcol 인수

κ·Έλ¦Ό μ˜μ—­μ„ λΆ„ν• ν•΄μ„œ ν”Œλ‘― μ˜μ—­μ„ λ§Œλ“€κ³  배치의 μˆœμ„œλ₯Ό μ„€μ •ν•˜λŠ” μΈμˆ˜λ‹€. 일반적으둜 ν•œ 화면에 μ—¬λŸ¬ ν”Œλ‘―μ„ κ·Έλ € λΉ„κ΅ν•˜λŠ” κ²½μš°μ— μœ μš©ν•˜λ‹€. κΈ°λ³Έ 값은 mfrow = c(1,1)와 mfcol = c(1,1)둜, 두 가지 λͺ¨λ‘ ν•œ 화면에 ν•˜λ‚˜μ˜ ν”Œλ‘―μ„ 그리도둝 κ·Έλž˜ν”½ ν™˜κ²½μ„ μ„€μ •ν•œλ‹€.
mfrow와 mfcol의 인수 값은 c(nr, nc)와 같은 길이가 2인 벑터λ₯Ό μ‚¬μš©ν•œλ‹€. 이 인수 값을 μ΄μš©ν•΄μ„œ κ·Έλ¦Ό μ˜μ—­λ₯Ό λ“±κ°„κ²©μœΌλ‘œ λΆ„ν• ν•˜μ—¬ nr * nc 개의 ν”Œλ‘― μ˜μ—­μ„ λ§Œλ“ λ‹€. μ΄λ•Œ nr은 λΆ„ν• ν•˜λ €λŠ” ν–‰μ˜ 개수λ₯Ό μ˜λ―Έν•œλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ ncλŠ” λΆ„ν• ν•˜λ €λŠ” μ—΄μ˜ 개수λ₯Ό μ˜λ―Έν•œλ‹€.
mfrow μΈμˆ˜λŠ” κ·Έλ €μ§€λŠ” ν”Œλ‘―μ„ λ°°μΉ˜ν•  λ•Œ ν–‰ μš°μ„ μœΌλ‘œ λ°°μΉ˜ν•˜κ³ , mfcol μΈμˆ˜λŠ” μ—΄ μš°μ„ μœΌλ‘œ λ°°μΉ˜ν•œλ‹€. 예λ₯Ό λ“€μ–΄ mfrow = c(3,2)의 κ²½μš°λŠ” 3ν–‰ 2μ—΄μ˜ 6개의 ν”Œλ‘ μ˜μ—­μ„ λ§Œλ“ λ‹€.

layout() ν•¨μˆ˜

mfrow, mfcol μΈμˆ˜μ™€ μœ μ‚¬ν•œ κΈ°λŠ₯을 ν•˜λŠ” ν•¨μˆ˜λ‘œ layout() ν•¨μˆ˜κ°€ μžˆλ‹€. κ²½μš°μ— λ”°λΌμ„œλŠ” 이 ν•¨μˆ˜κ°€ ν™•μž₯성이 더 λ›°μ–΄λ‚˜κ³  μœ μš©ν•  수 μžˆλ‹€. layout() ν•¨μˆ˜λŠ” mfrow, mfcol μΈμˆ˜μ™€ 달리 λŒ€μΉ­μ΄ μ•„λ‹Œ λͺ¨μ–‘μœΌλ‘œλ„ 뢄할이 κ°€λŠ₯ν•˜λ‹€.

(m <- matrix(c(1,1,2,3), ncol = 2, byrow = T))
layout(mat = m)
plot(cars, main = "scatter plot of cars data", pch = 19, col = 4)
hist(cars$speed)
hist(cars$dist)


화면이 λΆ„ν• λœ μ΄ν›„μ—λŠ” ν˜ΈμΆœλ˜λŠ” μˆœμ„œμ— 따라 1번 μ˜μ—­, 2번 μ˜μ—­, 3번 μ˜μ—­μ˜ 순으둜 ν”Œλ‘―μ„ λ°°μΉ˜ν•œλ‹€. layout() ν•¨μˆ˜λŠ” 각각의 μ˜μ—­μ— λŒ€ν•œ 높이와 λ„ˆλΉ„λ„ 지정할 수 있으며 행렬을 λ³΅μž‘ν•˜κ²Œ μƒμ„±ν• μˆ˜λ‘ λ³΅μž‘ν•œ λͺ¨μ–‘μ˜ ν™”λ©΄ 뢄할이 κ°€λŠ₯ν•˜λ‹€.

layout.show() ν•¨μˆ˜

layout.show() ν•¨μˆ˜λŠ” layout() ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ λΆ„ν• ν•œ κ·Έλž˜ν”½ ν™”λ©΄μ˜ λͺ¨μ–‘을 νŒŒμ•…ν•  수 μžˆλ„λ‘ ν•΄λ‹Ή κ΅¬μ—­μ˜ ν…Œλ‘λ¦¬μ— 선을 κ·Έλ¦°λ‹€.

split.screen() ν•¨μˆ˜

split.screen() ν•¨μˆ˜λ„ ν•˜λ‚˜μ˜ κ·Έλž˜ν”½ μž₯치λ₯Ό μ—¬λŸ¬ 개의 ν™”λ©΄μœΌλ‘œ λΆ„ν• ν•˜λŠ” ν•¨μˆ˜λ‹€. 이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ layout() 처럼 화면을 자유자재둜 λΆ„ν• ν•˜μ—¬ ν”Œλ‘―μ„ 그릴 수 μžˆλ‹€. 그리고 layout() ν•¨μˆ˜λ³΄λ‹€ 더 뢀가적인 κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λͺ‡ 개의 ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€. split.screen() ν•¨μˆ˜κ΅°μ—λŠ” 화면을 λΆ„ν• ν•˜λŠ” split.screen() ν•¨μˆ˜μ™€ λΆ„ν• λœ 화면을 μ§€μ •ν•˜λŠ” screen(), μ§€μ •λœ ν™”λ©΄μ˜ ν”Œλ‘―μ„ μ§€μš°λŠ” erase.screen(), ν™”λ©΄ λΆ„ν• μ˜ μž‘μ—…μ„ λ§ˆμΉ˜λŠ” close.screen()κ°€ μžˆλ‹€.

op <- par(no.readonly = TRUE)
# 바탕색을 ν°μƒ‰μœΌλ‘œ 지정
par(bg = "white")
# μƒν•˜ 2개둜 ν™”λ©΄ λΆ„ν• 
split.screen(fig = c(2,1))
# 2번 화면을 쒌우 두 개둜 λΆ„ν• 
split.screen(c(1,2), screen = 2)
# 3번 화면을 지정
screen(n = 3)
hist(cars$speed)
# 1번 화면을 지정
screen(1)
plot(cars, main = "scatter plot of cars data by split.screen")
# 4번 화면을 지엉
screen(4)
hist(cars$dist)
# 1번 화면을 λ°”νƒ•μƒ‰μœΌλ‘œ 칠함(지움)
erase.screen(n = 1)
# λ‹€μ‹œ 1번 화면을 지정
screen(1)
plot(cars, main = "scatter plot of cars data by split.screen", pch = 19, col = "blue")
# ν™”λ©΄ λΆ„ν•  μ •μ˜λ₯Ό 마침
close.screen(all = TRUE)
par(op)

split.screen() ν•¨μˆ˜λŠ” fig 인수둜 화면을 λΆ„ν• ν•œλ‹€. 이 인수 값은 두 개의 μ›μ†Œλ₯Ό κ°–λŠ” μ •μˆ˜ 벑터λ₯Ό μ‚¬μš©ν•˜λŠ”λ°, μ•žμ˜ 것이 ν–‰μ˜ λΆ„ν•  개수이고 λ’€μ˜ 것이 μ—΄μ˜ λΆ„ν•  κ°œμˆ˜λ‹€. λ˜ν•œ 이 ν•¨μˆ˜μ—μ„œ screen μΈμˆ˜λŠ” λΆ„ν• ν•˜λ €λŠ” ν™”λ©΄μ˜ 번호λ₯Ό μ§€μ •ν•œλ‹€.
κ·Έλž˜ν”½ μž₯치의 ν™˜κ²½ λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λΌμ„œ par() ν•¨μˆ˜λ‘œ ν™˜κ²½μ„€μ •μ„ λ°”κΎΈλ©΄ R μ„Έμ…˜μ΄ μ’…λ£Œλ˜κΈ° μ „κΉŒμ§€ λ³€κ²½λœ 인수의 값이 ν”Œλ‘― 생성에 영ν–₯을 λ―ΈμΉœλ‹€. κ·Έλž˜μ„œ par() ν•¨μˆ˜κ°€ 호좜되기 전에 op <- par(no.readonly = TRUE) ꡬ문으둜 op에 κ·Έλž˜ν”½ ν™˜κ²½ λ³€μˆ˜λ₯Ό μ €μž₯ν•˜κ³ , par() ν•¨μˆ˜κ°€ 호좜된 ν›„ 맨 λ§ˆμ§€λ§‰μ— par(op)둜 μ €μž₯된 ν™˜κ²½ λ³€μˆ˜λ“€λ‘œ ν™˜κ²½ λ³€μˆ˜λ₯Ό λ˜λŒλ Έλ‹€.

fig 인수

fig μΈμˆ˜λŠ” κ·Έλž˜ν”½ μž₯치의 μ˜μ—­μ—μ„œ κ·Έλ¦Ό μ˜μ—­μ˜ 크기와 μœ„μΉ˜λ₯Ό μ„€μ •ν•œλ‹€. 인수 값은 c(x1, x2, y1, y2) ν˜•μ‹μœΌλ‘œ μ§€μ •ν•œλ‹€. x1λŠ” κ·Έλž˜ν”½ μž₯치의 μ˜μ—­μ—μ„œ κ·Έλ¦Ό μ˜μ—­μ΄ 차지할 쒌츑 μœ„μΉ˜λ₯Ό x2λŠ” 우츑 μœ„μΉ˜λ₯Ό μ§€μ •ν•œλ‹€. λ˜ν•œ y1κ³Ό y2λŠ” 각각 ν•˜λ‹¨κ³Ό μƒλ‹¨μ˜ μœ„μΉ˜λ₯Ό μ§€μ •ν•œλ‹€. μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°’μ˜ μ΅œμ†Œκ°’μ€ 0이고 μ΅œλŒ€κ°’μ€ 1이닀. λ”°λΌμ„œ κ·Έλž˜ν”½ μž₯치의 전체 μ˜μ—­μ„ κ·Έλ¦Ό μ˜μ—­μœΌλ‘œ μ„€μ •ν•˜λŠ” 인수 값은 c(0, 1, 0, 1)이며 이 인수의 κΈ°λ³Έ 값이기도 ν•˜λ‹€.

op <- par(no.readonly = TRUE)
par(mfrow = c(2, 2))
par(fig = c(0, 1, 0.5, 1))
plot(cars, main = "scatter plot of cars data by fig")
par(fig = c(0, 0.5, 0, 0.5), new = T)
hist(cars$speed, main = "Histogram of car$speed by fig")
par(fig = c(0.5, 1, 0, 0.5), new = T)
hist(cars$dist, main = "Histogram of car$dist by fig")
par(op)


μœ„ μ½”λ“œμ—μ„œλŠ” κ·Έλž˜ν”½ μž₯치λ₯Ό μƒν•˜λ‘œ μ΄λ“±λΆ„ν•œ 상단을 μ‚¬μš©ν•˜κΈ° μœ„ν•΄ c(0, 1, 0.5, 1)둜 μ„€μ •ν•˜κ³  두 λ²ˆμ§Έμ™€ μ„Έ 번째 ν”Œλ‘―μ„ 각각 c(0, 0.5, 0, 0.5), c(0.5, 1, 0, 0.5)둜 μ§€μ •ν•˜λ©΄μ„œ μ™Όμͺ½ ν•˜λ‹¨κ³Ό 였λ₯Έμͺ½ ν•˜λ‹¨μ— λ°°μΉ˜ν–ˆλ‹€.

new 인수

new μΈμˆ˜λŠ” λ‹€μŒλ²ˆμ— κ³ μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜κ°€ 호좜될 λ•Œ κ·Έλ¦Ό μ˜μ—­μ˜ λ‚΄μš©μ„ μ΄ˆκΈ°ν™”ν•˜λŠ” μ—¬λΆ€λ₯Ό μ„€μ •ν•œλ‹€. 기본값은 FALSE둜 κ³ μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜κ°€ 호좜될 λ•Œ ν˜„μž¬μ˜ κ·Έλ¦Ό μ˜μ—­μ€ μ΄ˆκΈ°ν™”λœλ‹€. 인수 값이 TRUEλ©΄ λ‹€μŒλ²ˆ κ³ μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜κ°€ 호좜될 λ•Œμ—λ„ ν˜„μž¬ κ·Έλ¦Ό μ˜μ—­μ— 그렀진 κ·Έλž˜ν”„λŠ” μ΄ˆκΈ°ν™”λ˜μ§€ μ•ŠλŠ”λ‹€. new μΈμˆ˜λŠ” 두 개 μ΄μƒμ˜ κ³ μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜λ₯Ό ν•œ κ·Έλ¦Ό μ˜μ—­μ— 좜λ ₯ν•  λ•Œ 주둜 μ‚¬μš©λœλ‹€.

op <- par(no.readonly = TRUE)
par(nfrow = c(2, 2))
plot(1:10, type = "l", main = "plot")
par(new = F)
plot(10:1, type = "s", main = "plot by new = F")
plot(1:10, type = "l")
par(new = T)
plot(10:1, type = "s", main = "plot by new = T")
x <- rnorm(10)
plot(x)
par(new = T)
hist(x)
par(op)

bty 인수

bty(box type) μΈμˆ˜λŠ” ν”Œλ‘― μ˜μ—­μ„ λ‘˜λŸ¬μ‹Ό μƒμžμ˜ λͺ¨μ–‘을 μ„€μ •ν•œλ‹€. κ·Έ λͺ¨μ–‘에 따라 "o", "l", "7", "c", "u", "]"을 μ„ νƒν•œλ‹€. μƒμžμ˜ λͺ¨μ–‘은 문자의 λͺ¨μ–‘κ³Ό μœ μ‚¬ν•˜κ²Œ 그렀지며 기본값은 "o"이닀.

op <- par(no.readonly = TRUE)
par(mfrow = c(2, 3), bty = "l")
# Cλͺ¨μ–‘ (1, 2, 3 μ˜μ—­)
plot(0:6, 0:6, bty = "c", main = " bty = \"c\" ")
# 좜λ ₯ν•˜μ§€ μ•ŠμŒ
plot(0:6, 0:6, bty = "n", main = " bty = \"n\" ")
# 0λͺ¨μ–‘ (1, 2, 3, 4 μ˜μ—­)
plot(0:6, 0:6, bty = "o", main = " bty = \"o\" ")
# 7λͺ¨μ–‘ (3, 4 μ˜μ—­)
plot(0:6, 0:6, bty = "7", main = " bty = \"7\" ")
# uλͺ¨μ–‘ (1, 2, 4 μ˜μ—­)
plot(0:6, 0:6, bty = "u", main = " bty = \"u\" ")
# Lλͺ¨μ–‘ (1, 2 μ˜μ—­)
plot(0:6, 0:6, main = " bty = \"l\" ")
par(op)

pty 인수

pty(plot type) μΈμˆ˜λŠ” ν”Œλ‘― μ˜μ—­μ˜ ν˜•νƒœλ₯Ό μ§€μ •ν•œλ‹€. 인수 κ°’μœΌλ‘œλŠ” "s"와 "m"dmf μ‚¬μš©ν•  수 μžˆλ‹€. "s"λŠ” ν”Œλ‘― μ˜μ—­μ„ xμΆ•κ³Ό yμΆ•μ˜ λΉ„μœ¨μ΄ λ™μΌν•˜κ²Œ μ„€μ •ν•˜κ³ , "m"은 μ΅œλŒ€ 크기둜 ν”Œλ‘― μ˜μ—­μ„ μ„€μ •ν•œλ‹€.

op <- par(no.readonly = TRUE)
theta <- seq(-pi, pi, length = 30)
x <- cos(theta)
y <- sin(theta)
par(mfrow = c(1,2), pty = "s", bty = "o")
plot(x, y, type = "l", main = "pty = \"s\"")
par(pty = "m")
plot(x, y, type = "l", main = "pty = \"m\"")
par(op)


μœ„ 그림처럼 "s"인수 값을 μ‚¬μš©ν•œ ν”Œλ‘―μ€ 원이 κ·Έλ €μ§€μ§€λ§Œ, "m"인수 값을 μ‚¬μš©ν•œ ν”Œλ‘―μ—μ„œλŠ” 타원이 그렀진닀. λ”°λΌμ„œ xμΆ•κ³Ό yμΆ•μ˜ μŠ€μΌ€μΌμ΄ 동일해야 ν•˜λŠ” ν”Œλ‘―μ„ 그릴 λ•ŒλŠ” "s" 인수 값을 μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

0개의 λŒ“κΈ€