plot()은 R의 만능 작도 함수입니다
R에서 그래프를 그리려면 길이가 같은 두 수치형 벡터로 plot(x, y)를 호출하세요. R이 쌍마다 점을 하나씩 그리고 - 첫 번째 벡터는 가로축, 두 번째는 세로축을 따라 - 축 라벨을 변수 이름으로 자동 붙입니다:
x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)
plot(x, y)
결과는 x가 커질수록 꾸준히 올라가는 속 빈 원 열두 개의 산점도입니다. 입장료는 그것이 전부입니다: 설치할 패키지도, 설정도 없습니다. plot()은 base R에 포함되어 있으며 빠른 탐색용 그래픽 대부분의 뒤에 있는 함수입니다.
이 페이지의 코드 실행기는 텍스트 출력만 보여 주므로 이 글의 작도 호출은 정적인 예제입니다 - RStudio나 로컬 R 세션에 붙여 넣어 그림을 확인하세요. 여기서 실행할 수 있는 것은 데이터 준비입니다. 어차피 좋은 습관이기도 합니다: 그리기 전에 숫자를 보세요.
벡터를 하나만 전달하면 plot(y)는 인덱스 위치 1, 2, 3, ...을 가로축으로 사용합니다 - 일련의 측정값을 빠르게 훑어볼 때 유용합니다.
그래프 유형 고르기
type 인자가 쌍을 어떻게 그릴지 결정합니다:
plot(x, y, type = "p") # points (the default)
plot(x, y, type = "l") # a connected line
plot(x, y, type = "b") # both: points joined by line segments
plot(x, y, type = "h") # vertical bars from zero, like a spike chart
plot(x, y, type = "s") # a step function
type = "l"은 산점도를 선 그래프로 바꾸며, 시간에 따라 측정한 무엇이든 여기에 적합합니다. type = "b"는 추세를 보여 주면서도 개별 관측을 계속 보이게 합니다. type = "h"는 0에서 각 값까지 가는 얇은 수직 선분을 그리고, type = "s"는 다음 값이 나올 때까지 각 값을 유지하는 계단을 그립니다 - 가격이나 재고 수량처럼 껑충 뛰며 변하는 양에 유용합니다.
제목, 라벨, 색상
라벨 없는 그래프는 자신에게만 보내는 쪽지입니다. 세 인자가 그것을 고칩니다: 제목에는 main, 축 라벨에는 xlab과 ylab입니다. col은 색을 정합니다:
plot(x, y,
type = "b",
main = "Monthly signups",
xlab = "Month",
ylab = "Signups (thousands)",
col = "steelblue")
col은 세 종류의 값을 받습니다:
- 이름 있는 색상 -
"red","steelblue","tomato","darkgreen". R은 657가지를 알고 있으며,colors()를 실행하면 모든 이름이 나열됩니다. - 16진 코드 -
col = "#2C7FB8"으로 CSS와 똑같습니다. - 색상 벡터 - 점마다 하나씩 지정하며, 그룹별로 점 색을 칠하는 방법입니다:
group이 팩터일 때col = c("tomato", "steelblue")[group]처럼 씁니다.
pch로 점 기호, cex와 lwd로 크기 정하기
기본값인 속 빈 원은 탐색에는 괜찮지만 남에게 보여 줄 그래프에서는 지저분합니다. pch(plotting character)가 기호를 고르며 0부터 25까지 번호가 매겨져 있습니다:
plot(x, y, pch = 19) # solid circle - the usual choice
plot(x, y, pch = 17) # solid triangle
plot(x, y, pch = 21, col = "black",
bg = "gold") # fillable circle: border + fill
외워 둘 만한 숫자가 둘 있습니다. pch = 19는 완성된 그래프 대부분이 쓰는 속이 찬 원입니다. pch = 21부터 25까지는 채울 수 있는 기호입니다: col이 테두리를, bg가 안쪽을 칠하므로 두 가지 색의 점을 얻습니다.
크기와 선 스타일에도 각각 조절 다이얼이 있습니다:
cex는 점 크기를 조절합니다:cex = 1.5는 점을 1.5배로 키웁니다.lwd는type = "l"이나"b"의 선 굵기를 정합니다:lwd = 2면 굵고 읽기 좋은 선입니다.lty는 선 패턴을 정합니다:lty = 1은 실선,2는 파선,3은 점선입니다.
겹쳐 그리기: points(), lines(), abline()
plot()은 새 그래프를 시작합니다. 기존 그래프 위에 그리려면 동반 함수들을 쓰세요 - 이들은 현재 그래프를 대체하지 않고 덧붙입니다:
plot(x, y, type = "l", lwd = 2, col = "steelblue",
main = "Actual vs. target")
points(x, y, pch = 19, col = "steelblue") # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40") # add a second series, dashed
abline(h = 10, col = "tomato") # horizontal reference line at y = 10
abline()은 기준선 도구이며 세 가지 모드가 있습니다:
abline(h = 10)- 지정한 세로축 값에 수평선을 그립니다.abline(v = 6)- 지정한 가로축 값에 수직선을 그립니다.abline(a = 0, b = 1.5)- 절편a와 기울기b로 선을 그립니다.
가장 좋은 기법은 이것입니다: 적합된 모형을 넘기면 회귀선을 대신 그려 줍니다 - abline(lm(y ~ x)). 이 한 줄이 산점도를 하나의 주장으로 바꿉니다. 산점도 가이드가 여기서 출발합니다.
지켜야 할 규칙이 하나 있습니다: 축 범위는 첫 plot() 호출에서 고정됩니다. 겹쳐 그린 계열이 그 범위를 넘어가면 잘려 나갑니다 - 원래의 plot()에서 앞으로 추가할 모든 것을 담을 만큼 xlim =과 ylim =을 넉넉하게 설정하세요.
범례 추가하기
그래프에 계열이 둘 이상이면 범례가 필요합니다. legend()는 첫 인자로 위치 키워드를 받습니다 - "topright", "topleft", "bottomright", "bottomleft", "top", "bottom", "center" (이들은 R의 리터럴 문자열이므로 코드에서는 영어 그대로 둡니다) - 그다음에 라벨과 대응하는 스타일을 전달합니다:
legend("topright",
legend = c("Actual", "Target"),
col = c("steelblue", "gray40"),
lty = c(1, 2),
pch = c(19, NA),
lwd = 2)
col, lty, pch 벡터는 legend의 항목과 하나씩 대응해야 합니다 - 첫 번째 라벨이 첫 번째 색을 받는 식이죠. 어떤 계열에 해당하지 않는 스타일에는 NA를 쓰세요(여기서는 목표선에 점이 없습니다). 키워드는 상자를 작도 영역의 모서리에 고정합니다. 데이터가 비워 둔 모서리를 고르세요.
여러 패널과 파일로 저장하기
한 그림에 여러 그래프를 보이려면 그리기 전에 작도 격자를 설정하세요: par(mfrow = c(1, 2))는 장치를 1행 2열로 나누고, 이어지는 두 번의 plot() 호출이 순서대로 패널을 채웁니다. 끝나면 par(mfrow = c(1, 1))로 되돌리세요. 그러지 않으면 이후 그래프들이 계속 작게 나옵니다.
파일로 저장하는 것은 그리기를 화면 대신 파일 장치 로 돌리는 방식으로 동작합니다:
png("signups.png", width = 800, height = 600)
plot(x, y, type = "b", pch = 19, col = "steelblue",
main = "Monthly signups", xlab = "Month", ylab = "Signups")
dev.off()
png()와 dev.off() 사이의 모든 것이 파일로 들어가고 화면에는 아무것도 나타나지 않습니다. dev.off()를 잊는 것이 전형적인 버그입니다 - 장치를 닫을 때까지 파일은 잠긴 채 비어 있습니다. pdf(), jpeg(), svg()도 같은 방식으로 동작합니다.
핵심 정리
plot(x, y)는 즉시 그림을 그립니다.type =으로 점("p"), 선("l"), 둘 다("b")를 전환합니다.main,xlab,ylab이 그래프에 라벨을 붙이고,col은 색 이름(colors()에 657가지)이나 16진 코드를 받습니다.pch = 19는 속이 찬 원이고,pch = 21–25는 테두리(col)와 채우기(bg)를 분리합니다.cex,lwd,lty가 크기와 선 스타일을 조절합니다.points(),lines(),abline()은 기존 그래프에 겹쳐 그립니다 -abline(lm(y ~ x))는 한 번의 호출로 회귀선을 추가합니다.legend("topright", ...)가 계열에 라벨을 붙이고,png(...)+dev.off()가 파일로 저장합니다.
다음 주제: 히스토그램 - 새 데이터셋을 만났을 때 가장 먼저 손이 가는 한 변수 그래프입니다.
자주 묻는 질문
R에서 그래프는 어떻게 그리나요?
길이가 같은 두 수치형 벡터로 plot(x, y)를 호출합니다. R이 그래픽 창을 열고 쌍마다 점을 하나씩 그립니다. 선 그래프에는 type = "l", 제목에는 main, xlab, ylab, 색상에는 col을 추가하세요.
R에서 pch는 무슨 뜻인가요?
pch(plotting character)는 점 기호를 고르며 0부터 25까지 번호가 매겨져 있습니다. pch = 19는 대부분이 원하는 속이 찬 원입니다. 21부터 25까지의 기호는 채우기가 별도로 있어 col이 테두리를, bg가 안쪽을 정합니다.
R에서 그래프에 범례는 어떻게 추가하나요?
그래프를 그린 뒤 legend()를 호출합니다. 첫 인자로 "topright" 같은 위치 키워드를, 그다음에 라벨 벡터 legend =와 그래프에서 사용한 col, pch, lty 값을 전달합니다.
R 그래프를 파일로 어떻게 저장하나요?
그리기 전에 파일 장치를 열고 끝난 뒤 닫습니다: png("myplot.png", width = 800, height = 600)를 호출하고, 그래프 코드를 실행한 뒤 dev.off()를 부릅니다. 화면에는 아무것도 나타나지 않고 그래프가 곧바로 파일로 들어갑니다.