22.4 점 추가 : points(x, y)
이번 절에서는 낮은 수준의 그래프 함수 네번째로 points(x, y)
함수를 이용하여 점을 추가하는 방법에 대하여 학습하겠습니다.
points()
함수의 일반적인 사용법은 다음과 같습니다.
points(x, y = NULL, type = "p", ...)
구분 | 기능 설명 |
---|---|
x ,y |
x, y 좌표 벡터 (coordinate vectors of points to plot) |
type = "p" |
그래프 유형 = “점 그래프” |
... |
기호 모양(pch ), 색깔(col ), 크기(cex ) 등의 그래프 모수 (parameters) 사용 |
MASS
패키지에 내장되어 있는 Cars93
데이터프레임의 차량 무게(Weight
), 고속도로 연비 (MPG.highway
), 차종 (Type
) 변수를 사용해서 점을 추가하는 그래프를 실습해보겠습니다.
높은 수준의 그래프 함수 중에서 plot(x, y, type = 'p')
로 하면 점 그래프 (points plot)을 그릴 수 있습니다.
plot(x, y, type = 'p')
로 산점도를 그리고, 그 위에 points(x, y)
함수로 점을 추가하는 예를 살펴 보겠습니다. 정확히 두 개 그래프가 일치합니다.
library(MASS)
##-----------------------------------------
## 점 추가 : point(x, y)
##-----------------------------------------
# 고수준 함수 plot()을 이용하여 산점도 그리기
attach(Cars93)
## The following object is masked _by_ .GlobalEnv:
##
## Cylinders
plot(Weight, MPG.highway, type = 'p') # 점 플롯입니다.
# 플롯 위에 낮은 수준의 함수 point() 를 이용하여 점을 추가합니다.
plot(Weight, MPG.highway, type = 'n') # 빈 플롯입니다.
points(Weight, MPG.highway) # 위의 플롯과 정확히 똑 같습니다.
detach(Cars93)
그러면 왜 굳이 points()
라는 낮은 수준의 함수를 가지고 점을 추가하려고 하는 것인지 의문이 들것입니다. 그 이유는 points()
함수를 가지고 필요에 따라서 순차적으로 점을 추가할 수 있고, 조건을 부여하고 그래프 모수 중에 색깔이나 기호 모양 등을 다르게 해서 탐색적 분석을 진행하는데 유용하기 때문입니다.
물론 plot(x, y, type = 'p')
로 원하는 그래프를 그릴 수 있다면 points()
함수를 사용할 필요는 없겠지요. 아래에 points()
의 몇 가지 사용 형태를 보시고 필요한 상황에 맞게 골라 쓰면 되겠습니다.
아래에는 차종(Type
)별로 기호 모양과 색깔을 달리하면서 무게(Weight
)와 고속도로 연비(MPG.highway
) 산점도를 그려보겠습니다. 2차원의 x, y 공간에 차종(Type
)이라는 제3의 차원을 추가해서 볼 수 있는 매우 유용한 방법입니다.
대신 Base Graphics 에서는 조건의 갯수만큼 손이 참 많이 가는 단점이 있습니다 (참고로, ggplot2
plotting system을 사용하면 조건에 따른 색이나 기호를 달리하도록 지정하는게 한 줄이면 끝나고, 범례(legend)도 알아서 추가해주므로 편합니다).
library(MASS)
attach(Cars93)
## The following object is masked _by_ .GlobalEnv:
##
## Cylinders
# 현재의 빈 플롯에 pch, col, cex 모수를 설정한 점을 추가합니다.
plot(Weight, MPG.highway, type = 'n') # 빈 플롯입니다.
points(Weight, MPG.highway, pch = 15, col = "blue", cex = 1.5)
detach(Cars93)
산점도의 점들을 조건에 따라 상이한 문자의 점으로 추가할 수도 있습니다.
library(MASS)
attach(Cars93)
## The following object is masked _by_ .GlobalEnv:
##
## Cylinders
# 조건에 따라 상이한 문자의 점을 추가합니다.
plot(Weight, MPG.highway, type = 'n') # 빈 플롯을 그립니다.
table(Cars93$Type)
##
## Compact Large Midsize Small Sporty Van
## 16 11 22 21 14 9
# Type = Compact 인 경우
points(Weight[Type == "Compact"], MPG.highway[Type == "Compact"], pch = 0)
# Type = Large 인 경우
points(Weight[Type == "Large"], MPG.highway[Type == "Large"], pch = 1)
# Type = Midsize 인 경우
points(Weight[Type == "Midsize"], MPG.highway[Type == "Midsize"], pch = 17, col = "yellow")
# Type = Small 인 경우
points(Weight[Type == "Small"], MPG.highway[Type == "Small"], pch = 3)
# Type = Sporty 인 경우
points(Weight[Type == "Sporty"], MPG.highway[Type == "Sporty"], pch = 9)
# Type = Van 인 경우
points(Weight[Type == "Van"], MPG.highway[Type == "Van"], pch = 15, col = "blue")
title("자동차 종류에 따라 상이한 문자의 점 추가")
# 상단부 오른쪽에 범례를 추가합니다.
legend("topright", # 범례의 표시 위치입니다.
c("Compact", "Large", "Midsize", "Small", "Sporty", "Van"), # 범례로 출력될 문자열입니다.
col = c("black", "black", "yellow", "black", "black", "blue"), # 범례의 색깔입니다
pch = c(0, 1, 17, 3, 9, 15) # 표시될 기호 문자입니다.
)
detach(Cars93)