πŸ“ˆ [R] 데이터 μ‹œκ°ν™” - λ²”λ‘€, μ’Œν‘œμΆ•μ„ κ·Έλ¦¬λŠ” ν•¨μˆ˜

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

R

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

λ²”λ‘€λ₯Ό κ·Έλ¦¬λŠ” ν•¨μˆ˜

legend() ν•¨μˆ˜

λ²”λ‘€λŠ” 두 개 μ΄μƒμ˜ λ³€μˆ˜λ₯Ό ν‘œν˜„ν•œ ν”Œλ‘―μ—μ„œ λ³€μˆ˜κ°€ μ–΄λ–»κ²Œ ν‘œν˜„λ˜μ—ˆλŠ”μ§€λ₯Ό κ·Έ λͺ¨μ–‘μœΌλ‘œ μ„€λͺ…ν•˜λŠ” μ •λ³΄λ‘œ legend() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ κ·Έλ¦°λ‹€.
λ²”λ‘€μ˜ μ’…λ₯˜λŠ” 크게 μ„Έ 가지가 μžˆλ‹€. μ²«μ§ΈλŠ” 점을 κ΅¬λΆ„ν•˜λŠ” λ²”λ‘€λ‘œ μ‚°μ λ„μ²˜λŸΌ 점으둜 ν‘œν˜„ν•˜λŠ” ν”Œλ‘―μ— μ‚¬μš©ν•œλ‹€. λ‘˜μ§ΈλŠ” μ„ μœΌλ‘œ κ΅¬λΆ„ν•˜λŠ” λ²”λ‘€λ‘œ μΆ”μ„Έμ„ κ³Ό 같은 μ„  κ·Έλž˜ν”„μ— μ΄μš©λ˜λŠ” 것이닀. 이 두가지λ₯Ό ν˜Όν•©ν•œ ν˜•νƒœμ˜ 범둀도 κ°€λŠ₯ν•˜λ‹€. λ§ˆμ§€λ§‰μ€ 면으둜 κ΅¬λΆ„λ˜λŠ” λ²”λ‘€λ‘œ νžˆμŠ€ν† κ·Έλž¨μ΄λ‚˜ λ§‰λŒ€ κ·Έλž˜ν”„μ— μ΄μš©λœλ‹€. 점을 μ‚¬μš©ν•˜λŠ” λ²”λ‘€λŠ” pch 인수λ₯Ό, 선을 μ‚¬μš©ν•˜λŠ” λ²”λ ˆλŠ” lty 인수λ₯Ό μ΄μš©ν•˜λŠ”λ°, 두 가지 인수λ₯Ό λ‹€ μ‚¬μš©ν•˜λ©΄ μ„ κ³Ό 점을 ν˜Όν•©ν•œ λ²”λ‘€λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. 면을 μ‚¬μš©ν•˜λŠ” λ²”λ‘€λŠ” fill 인수λ₯Ό μ΄μš©ν•œλ‹€.
λ²”λ‘€μ˜ μœ„μΉ˜λ₯Ό μ§€μ •ν•˜λŠ” λ°©λ²•μ—λŠ” μ„Έ 가지가 μžˆλ‹€. 일단 첫 λ²ˆμ§ΈλŠ” (x,y) μ’Œν‘œλ₯Ό μ΄μš©ν•˜λŠ” 방법이고, 두 λ²ˆμ§ΈλŠ” μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 문자λ₯Ό μ΄μš©ν•˜λŠ” 방법이닀. λ§ˆμ§€λ§‰μœΌλ‘œ μ„Έ λ²ˆμ§ΈλŠ” locator() ν•¨μˆ˜λ₯Ό μ΄μš©ν•˜λŠ” λ°©λ²•μœΌλ‘œ 첫 번째 방법을 μ‘μš©ν•œ 것이닀. locator() ν•¨μˆ˜κ°€ 호좜되면 μ‹­μžκ°€ λͺ¨μ–‘μ˜ 마우슀 μ»€μ„œκ°€ λ‚˜νƒ€λ‚˜λŠ”λ°, ν”Œλ‘― μ˜μ—­μ„ ν΄λ¦­ν•˜λ©΄ ν•΄λ‹Ή μ’Œν‘œμ˜ x와 y 값을 λ°˜ν™˜ν•œλ‹€. κ·Έ μ’Œν‘œμ— λ²”λ‘€λ₯Ό 생성할 수 있기 λŒ€λ¬Έμ— μ‚¬μš©μžκ°€ μž„μ˜λ‘œ 빈 곡간을 μ„ νƒν•΄μ„œ λ²”λ‘€λ₯Ό μœ„μΉ˜μ‹œν‚¬ λ•Œ μ‚¬μš©ν•  수 μžˆλŠ” μ•„μ£Ό μœ μš©ν•œ 방법이닀.

plot(1:10, type = "n", xlab = "", ylab = "", main = "legend")
legend("bottomright", "(x,y)", pch = 1, title = "bottomright")
legend("bottom", "(x,y)", pch = 1, title = "bottom")
legend("bottomleft", "(x,y)", pch = 1, title = "bottomleft")
legend("left", "(x,y)", pch = 1, title = "left")
legend("topleft", "(x,y)", pch = 1, title = "topleft")
legend("top", "(x,y)", pch = 1, title = "top")
legend("topright", "(x,y)", pch = 1, title = "topright")
legend("right", "(x,y)", pch = 1, title = "right")
legend("center", "(x,y)", pch = 1, title = "center")
legends <- c("Legend1", "Legend2")
legend(3, 8, legend = legends, pch = 1:2, col = 1:2)
legend(7, 8, legend = legends, pch = 1:2, col = 1:2, lty = 1:2)
legend(3, 4, legend = legends, fill = 1:2)
legend(7, 4, legend = legends, fill = 1:2, density = 30)
legend(locator(1), legend = "Locator", fill = 1)

μ’Œν‘œμΆ•μ„ κ·Έλ¦¬λŠ” ν•¨μˆ˜

일반적으둜 κ³ μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜λ₯Ό μ΄μš©ν•΄μ„œ ν”Œλ‘―μ„ 그리면 μ’Œν‘œμΆ•κ³Ό 각 μΆ•λ“€μ˜ 이름이 μžλ™μœΌλ‘œ 좜λ ₯λ˜μ§€λ§Œ, νšμΌν™”λœ λͺ¨μŠ΅μœΌλ‘œ 좜λ ₯되기 λ•Œλ¬Έμ— μ‚¬μš©μžκ°€ λ‹€λ₯Έ λͺ¨μ–‘μ΄λ‚˜ μœ„μΉ˜μ— 좜λ ₯ν•˜κ³ μž ν•œλ‹€λ©΄ μ €μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜λ‘œ κ·Έλ €μ•Ό ν•œλ‹€.

axis() ν•¨μˆ˜

axis() ν•¨μˆ˜λŠ” side 인수λ₯Ό μ΄μš©ν•΄μ„œ μ’Œν‘œμΆ•μ„ 그릴 μœ„μΉ˜λ₯Ό μ§€μ •ν•œλ‹€. 이 ν•¨μˆ˜μ—μ„œλŠ” outer 인수λ₯Ό μ΄μš©ν•΄μ„œ λ°”κΉ₯ λ§ˆμ§„μ— μ’Œν‘œμΆ•μ„ 그리고, line 인수λ₯Ό μ‚¬μš©ν•΄μ„œ μ’Œν‘œμΆ•μ„ 그릴 라인 μœ„μΉ˜λ₯Ό μ„€μ •ν•  수 μžˆλ‹€. μ΄λŠ” mtext() ν•¨μˆ˜μ™€ κ°™λ‹€.
col μΈμˆ˜λŠ” μ’Œν‘œμΆ•μ˜ μ„ κ³Ό ν‹±(ticks) 마크의 색상을 μ§€μ •ν•˜κ³ , col.axis μΈμˆ˜λŠ” ν‹± 마크의 라벨 색상을 μ§€μ •ν•œλ‹€. λ§Œμ•½ 두 개의 인수λ₯Ό λ™μ‹œμ— μ‚¬μš©ν•  경우 ν‹± 마크의 색상은 col 인수λ₯Ό λ”°λ₯΄κ³ , ν‹± 마크의 라벨은 col.axis 인수λ₯Ό λ”°λ₯Έλ‹€. 이 λ•Œ tick 인수의 값이 FALSEλ©΄ 라벨을 ν‘œμ‹œν•˜κ³ , ν‹± λ§ˆν¬λŠ” ν‘œμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€. 또 at μΈμˆ˜λŠ” 기쀀점을 μ •μ˜ν•˜κ³ , pos(position) μΈμˆ˜λŠ” μ’Œν‘œμΆ•μ„ λ§ˆμ§„μ΄ μ•„λ‹Œ ν”Œλ‘― μ˜μ—­μ— 좜λ ₯ν•˜λŠ” μœ„μΉ˜λ₯Ό μ§€μ •ν•œλ‹€.

op <- par(no.readonly = TRUE)
par(oma = c(0, 0, 2, 0))
plot(1:5, type = "l", main = " axis", axes = FALSE, xlab = "", ylab = "")
axis(side = 1, at = 1:5, labels = LETTERS[1:5], line = 2)
# tick = F μ΄λ―€λ‘œ col.axisλŠ” 의미 μ—†μŒ
axis(side = 2, tick = F, col.axis = "blue")
axis(side = 3, outer = T)
axis(side = 3, at = c(1, 3, 5), pos = 3, col = "blue", col.axis = "red")
axis(side = 4, lty = 2, lwd = 2)
par(op)

기타 μ €μˆ˜μ€€ κ·Έλž˜ν”½ ν•¨μˆ˜

grid() ν•¨μˆ˜

grid() ν•¨μˆ˜λŠ” μ’Œν‘œν‰λ©΄μ— 격자λ₯Ό κ·Έλ¦°λ‹€. 격자λ₯Ό 그리면 μ’Œν‘œ ν‰λ©΄μ˜ 점듀에 λŒ€ν•œ μ§€μ‹œμ„ μœΌλ‘œ μž‘μš©ν•΄μ„œ ν•΄λ‹Ή μ’Œν‘œ κ°’μ˜ μœ„μΉ˜λ₯Ό μ‰½κ²Œ νŒŒμ•…ν•  μˆ˜κ°€ μžˆλ‹€.

op <- par(no.readonly = TRUE)
par(mar = c(4, 4, 2, 2), mfrow = c(2, 1))
plot(iris$Sepal.Length, iris$Sepal.Width, pch = 16, col = as.integer(iris$Species))
grid()
title("grid()")
plot(iris$Sepal.Length, iris$Sepal.Width, pch = 16, col = as.integer(iris$Species))
grid(3, 4, lty = 1, lwd = 1.2, col = "blue")
title("grid(3, 4, lty = 1, lwd = 2, col = \"blue\")")
par(op)

첫 번째 그림은 grid() ν•¨μˆ˜μ˜ κΈ°λ³Έν˜•μœΌλ‘œ κ²©μžλŠ” xμΆ•κ³Ό yμΆ•μ˜ ν‹± λ§ˆν¬μ— 선을 κ·Έμ–΄ λ§Œλ“€μ–΄μ§„λ‹€. μ΄λ•Œ κ²©μžμ„ μ˜ 색상은 "lightgray", μ„ μ˜ μœ ν˜•μ€ "dotted"둜 그렀진닀. 두 번째 κ·Έλ¦Όμ—μ„œλŠ” xμΆ•μ—λŠ” 3개의 격자, yμΆ•μ—λŠ” 4개의 격자λ₯Ό μƒμ„±ν•œλ‹€. μ„ μ˜ 색상은 νŒŒλž€μƒ‰, κ΅΅κΈ°λŠ” 2둜 μ§€μ •λœλ‹€.

rug() ν•¨μˆ˜

κ·Έλž˜ν”„μ— 일차원 정보인 러그λ₯Ό μΆ”κ°€ν•˜λŠ” ν•¨μˆ˜λ‹€. λŸ¬κ·Έλž€ 데이터듀을 μΌμ°¨μ›μ˜ μ’Œν‘œμΆ•μ— ν‘œμ‹œν•˜λŠ” λ°©λ²•μœΌλ‘œ 자료의 밀도에 따라 띠 λͺ¨μ–‘μ˜ 선이 그렀진닀.

op <- par(no.readonly = TRUE)
par(mar = c(4, 4, 2, 2), mfrow = c(2, 1))
plot(density(quakes$lat), main = "rug(lat)")
rug(quakes$lat)
plot(density(quakes$long), main = "side = 3, col = 'blue', ticksize = 0.04")
rug(quakes$long, side = 3, col = "blue", ticksize = 0.04)
par(op)

μœ„ μ½”λ“œμ—μ„œ μ‚¬μš©ν•œ density() ν•¨μˆ˜λŠ” λ°μ΄ν„°μ˜ 밀도λ₯Ό μΆ”μ •ν•˜λŠ” ν•¨μˆ˜λ‹€. 첫 번째 κ·Έλ¦Όμ—μ„œλŠ” κΈ°λ³Έ ν˜•νƒœμ˜ 러그λ₯Ό λ§Œλ“œλŠ”λ°, κ·Έ μœ„μΉ˜λŠ” μ•„λž˜μͺ½ (side 1)에 μƒμ„±λœλ‹€. 두 번째 κ·Έλ¦Όμ—μ„œλŠ” μœ—μͺ½(side 3)에 러그λ₯Ό λ§Œλ“€λ©° μ„ μ˜ 색상은 νŒŒλž€μƒ‰, ticksizeλŠ” 0.04둜 μ§€μ •ν•œλ‹€. λ°€λ„κ³‘μ„ μ˜ 높이가 λ†’μ„μˆ˜λ‘ 러그의 밀도가 크게 좜λ ₯λœλ‹€λŠ” 것을 μ•Œ 수 μžˆλ‹€. 이차원 ν”Œλ‘―λ³΄λ‹€λŠ” 정보가 λΆ€μ‘±ν•˜μ§€λ§Œ λ°€λ„μ˜ 크기λ₯Ό λΉ„κ΅ν•˜λŠ” μˆ˜μ€€μ˜ μ •λ³΄λ‘œλŠ” κ°€μΉ˜κ°€ μžˆλ‹€.

chull() ν•¨μˆ˜

chull() ν•¨μˆ˜λŠ” μ’Œν‘œ 점듀이 집합이 μ£Όμ–΄μ‘Œμ„ λ•Œ λͺ¨λ“  점을 ν¬ν•¨ν•˜λŠ” λ³Όλ‘ν•œ ν…Œλ‘λ¦¬ μ’Œν‘œ μ λ“€μ˜ μ›μ†Œλ₯Ό κ΅¬ν•˜λŠ” ν•¨μˆ˜λ‹€. chull() ν•¨μˆ˜λŠ” 직접 ν”Œλ‘―μ„ κ·Έλ¦¬μ§€λŠ” μ•Šμ§€λ§Œ, ν”Œλ‘―μ„ κ·Έλ¦¬λŠ” μ •λ³΄λ‘œ μ΄μš©λœλ‹€.

set.seed(1)
dot <- matrix(rnorm(200), ncol = 2)
plot(dot)
chull.data <- chull(dot)
polygon(dot[chull.data, ], angle = 45, density = 15, col = "red")
title(main = "Polygon by chull")

0개의 λŒ“κΈ€