지난번 포스팅에서는 그래프에 추가적인 정보를 입력하는 낮은 수준의 그래프 함수(low level graphic functions) 중에서
(1) 제목, XY축 Label 추가하는 title()
(2) XY축의 형태를 변환하는 axis(side, ...)
(3) 직선 연결, 추가 : lines(x, y), abline(a, b), abline(h=y), abline(v=x)
에 대해서 알아보았습니다.
이번 포스팅에서는 낮은 수준의 그래프 함수 네번째로 (4) 점 추가 : points(x, y) 에 대해서 소개하겠습니다.
[ 낮은 수준의 그래프 함수 (Low level graphic function) ]
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) 함수로 점을 추가한 그래프 예시를 들어보았습니다. 정확히 두 개 그래프가 일치합니다.
> ##----------------------------------------- > ## adding points() : point(x, y) > ##----------------------------------------- > > # to use Cars93 dataframe > library(MASS) > str(Cars93) 'data.frame': 93 obs. of 27 variables: $ Manufacturer : Factor w/ 32 levels "Acura","Audi",..: 1 1 2 2 3 4 4 4 4 5 ... $ Model : Factor w/ 93 levels "100","190E","240",..: 49 56 9 1 6 24 54 74 73 35 ... $ Type : Factor w/ 6 levels "Compact","Large",..: 4 3 1 3 3 3 2 2 3 2 ... $ Min.Price : num 12.9 29.2 25.9 30.8 23.7 14.2 19.9 22.6 26.3 33 ... $ Price : num 15.9 33.9 29.1 37.7 30 15.7 20.8 23.7 26.3 34.7 ... $ Max.Price : num 18.8 38.7 32.3 44.6 36.2 17.3 21.7 24.9 26.3 36.3 ... $ MPG.city : int 25 18 20 19 22 22 19 16 19 16 ... $ MPG.highway : int 31 25 26 26 30 31 28 25 27 25 ... $ AirBags : Factor w/ 3 levels "Driver & Passenger",..: 3 1 2 1 2 2 2 2 2 2 ... $ DriveTrain : Factor w/ 3 levels "4WD","Front",..: 2 2 2 2 3 2 2 3 2 2 ... $ Cylinders : Factor w/ 6 levels "3","4","5","6",..: 2 4 4 4 2 2 4 4 4 5 ... $ EngineSize : num 1.8 3.2 2.8 2.8 3.5 2.2 3.8 5.7 3.8 4.9 ... $ Horsepower : int 140 200 172 172 208 110 170 180 170 200 ... $ RPM : int 6300 5500 5500 5500 5700 5200 4800 4000 4800 4100 ... $ Rev.per.mile : int 2890 2335 2280 2535 2545 2565 1570 1320 1690 1510 ... $ Man.trans.avail : Factor w/ 2 levels "No","Yes": 2 2 2 2 2 1 1 1 1 1 ... $ Fuel.tank.capacity: num 13.2 18 16.9 21.1 21.1 16.4 18 23 18.8 18 ... $ Passengers : int 5 5 5 6 4 6 6 6 5 6 ... $ Length : int 177 195 180 193 186 189 200 216 198 206 ... $ Wheelbase : int 102 115 102 106 109 105 111 116 108 114 ... $ Width : int 68 71 67 70 69 69 74 78 73 73 ... $ Turn.circle : int 37 38 37 37 39 41 42 45 41 43 ... $ Rear.seat.room : num 26.5 30 28 31 27 28 30.5 30.5 26.5 35 ... $ Luggage.room : int 11 15 14 17 13 16 17 21 14 18 ... $ Weight : int 2705 3560 3375 3405 3640 2880 3470 4105 3495 3620 ... $ Origin : Factor w/ 2 levels "USA","non-USA": 2 2 2 2 2 1 1 1 1 1 ... $ Make : Factor w/ 93 levels "Acura Integra",..: 1 2 4 3 5 6 7 9 8 10 ... > > # scatter plot > attach(Cars93) > > plot(Weight, MPG.highway, type = 'p') # points plot
|
그러면 왜 굳이 points() 라는 낮은 수준의 함수를 가지고 점을 추가하려고 하는 것인지 의문이 들것입니다. 그 이유는 points() 함수를 가지고 필요에 따라서 순차적으로 점을 추가할 수 있고, 조건을 부여하고 그래프 모수 중에 색깔이나 기호 모양 등을 다르게 해서 탐색적 분석을 진행하는데 유용하기 때문입니다. 물론 plot(x, y, type = 'p')로 원하는 그래프를 그릴 수 있다면 points() 함수를 사용할 필요는 없겠지요. 아래에 points()의 몇 가지 사용 형태를 보시고 필요한 상황에 맞게 골라 쓰면 되겠습니다.
아래에는 차종(Type)별로 기호 모양과 색깔을 달리하면서 무게(Weight)와 고속도로 연비(MPG.highway) 산포도를 그려보겠습니다. 2차원의 x, y 공간에 차종(Type)이라는 제3의 차원을 추가해서 볼 수 있는 매우 유용한 방법입니다. 대신 Base Graphics 에서는 조건의 갯수만큼 손이 참 많이 가는 단점이 있습니다 (참고로, ggplot2 plotting system을 사용하면 조건에 따른 색이나 기호를 달리하도록 지정하는게 한 줄이면 끝나고, 범례(legend)도 알아서 추가해주므로 편합니다)
> # adding points to the current plot with pch, col, cex parameters > plot(Weight, MPG.highway, type = 'n') # blank plot > points(Weight, MPG.highway, pch = 15, col = "blue", cex = 1.5)
|
> # adding points with different characters by condition > plot(Weight, MPG.highway, type = 'n') # blank plot >
> 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("adding points with different characters by Car Types") >
> > # adding legend to topright side > 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) |
다음번 포스팅에서는 text(), mtext() 함수로 문자(text)를 추가하는 방법에 대해서 알아보겠습니다.
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^