Menu

R의 plot() 함수: 유형, 색상, pch, 범례

R의 plot() 함수가 동작하는 방식 - 그래프 유형, 제목과 축 라벨, 색상, 점 기호(pch), lines()와 abline()으로 겹쳐 그리기, 그리고 범례.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

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, 축 라벨에는 xlabylab입니다. 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배로 키웁니다.
  • lwdtype = "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 = 2125는 테두리(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()를 부릅니다. 화면에는 아무것도 나타나지 않고 그래프가 곧바로 파일로 들어갑니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기