변수의 개수 및 데이터의 형태에 따라서 그래프, 시각화 방법이 달라지는데요,
지난번 포스팅에서는 한 변수의 연속형 데이터의 시각화 방법으로
- 히스토그램(Histogram)
: geom_histogram()
- 커널 밀도 곡선(Kernel Density Curve)
: geom_density()
- 박스 그래프(Box Plot)
: geom_boxplot()
- 바이올린 그래프(Violin Plot)
: geom_violin()
범주형 데이터에 대한 시각화 방법으로
- 막대그림(Bar Chart): geom_bar()
- 원그림(Pie Chart): geom_bar() + coord_polar()
- 모자이크 그림(Mosaic Chart): vcd 패키지 mosaic()
알아보았습니다.
이번에는 두 개 이상의 연속형 변수를 시각화하는 방법으로
- 산점도 (Scatter Plot): geom_point()
- 선 그래프(Line Plot): geom_line()
- 시계열 그래프(Time Series Plot): geom_line()
에 대해서 알아보겠습니다.
참고로 ☞ ggplot2의 geom_point() 산점도 그리기
☞ Base Graphics 패키지의 pairs() 함수를 사용한 산점도 행렬 그리기
[ 변수 개수 및 형태에 따른 그래프 종류 ]
산점도(Scatter Plot)는 x축과 y축에 연속형인 두 변수의 값을 점으로 뿌려준 그래프로서, 연속형인 두 변수 간의 관계를 파악하는데 유용합니다. 다중회귀분석을 할 때 제일 처음 하는 일이 바로 산점도 (행렬)을 그려보고 두 변수간의 선형성 여부를 탐색해보는 일입니다.
MASS패키지 내 Cars93 데이터 프레임의 고속도로연비(MPG.highway)와 엔진크기(EngineSize), 무게(Weight), 길이(Length) 와의 관계를 ggplot2 패키지의 geom_point() 함수를 가지고 산포도를 그려서 알아보도록 하겠습니다. 그리고 차종(Type)별로 고속도로연비(MPG.highway) 는 어떻게 되는지도 산포도를 가지고 점의 색깔과 모양을 달리해서 보는 방법을 알아보겠습니다.
> 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 ... |
상관계수를 가지고 고속도로연비(MPG.highway)와 엔진크기(EngineSize), 무게(Weight), 길이(Length) 와의 상관도를 먼저 살펴보면, 고속도로연비와 엔진크기, 무게, 길이가 모두 역의 상관관계가 있는 걸로 나왔고, 특히 무게가 역의 상관관계가 크게 나왔습니다.
> Cars93_MPG <- Cars93[,c("MPG.highway", "EngineSize", "Weight", "Length")] > cor(Cars93_MPG) MPG.highway EngineSize Weight Length MPG.highway 1.0000000 -0.6267946 -0.8106581 -0.5428974 EngineSize -0.6267946 1.0000000 0.8450753 0.7802831 Weight -0.8106581 0.8450753 1.0000000 0.8062743 Length -0.5428974 0.7802831 0.8062743 1.0000000 |
이제 산점도를 그려서 고속도로연비(MPG.highway)와 엔진크기(EngineSize), 무게(Weight), 길이(Length) 관계를 살펴보겠습니다.
제일 쉬운 방법은 Base graphics 패키지에 있는 plot()함수를 사용하는 방법입니다. 위에서 분석하려는 변수만 따로 선별해놓은 Cars93_MPG 데이터 프레임을 가지고 한번 산점도 행렬을 그려보겠습니다.
> plot(Cars93_MPG, + main="Scatter Plot Matrix")
|
ggplot2로는 산점도 행렬(Scatter Plot matrix)를 그리는 것이 힘듭니다. 대신 여러 조건을 주어서 두 변수 간 산점도 행렬을 다양하게 그려보는데는 아주 강력합니다 우선 ggplot2의 geom_point()함수를 가지고 색깔(colour)과 모양(shape)을 달리하면서 산점도를 그려보겠습니다.
> # Scatter Plot: MPG.highway vs. EngineSize, Weight, Length > library(ggplot2) >> ggplot(data=Cars93, aes(x=EngineSize, y=MPG.highway)) + + geom_point(shape=15, size=3, colour="blue") + # shape 15: solid square + ggtitle("Scatter Plot: MPG.highway vs. EngineSize")
|
참고로, R plot의 숫자별 모양은 다음과 같습니다.
> # R plot symbols: points > help(pch)
|
이번에는 두 변수의 산포도에 모델명 라벨을 geom_text(label=) 함수를 이용하여 입혀보겠습니다.
|
다음으로 차종(Type)별로 구분하여서 무게(Weight)와 고속도로연비(MPG.highway) 간의 관계를 3가지 방법을 사용하여 산포도로 그려보도록 하겠습니다.
(1) 차종(Type)별로 색깔(colour)을 달리해서
(2) 차종(Type)별로 모양(shape)을 달리해서
(3) 차종(Type)별로 층(facet_grid)을 나누어서
산포도를 그려보겠습니다.
(1) 차종(Type)별로 색깔(colour)을 달리했을 때
> # Scatter Plot by Type, using different Colours > ggplot(data=Cars93, aes(x=Weight, y=MPG.highway, colour=Type)) + + geom_point(shape=19, size=3) + + ggtitle("Scatter Plot by Type, using different Colours")
|
(2) 차종(Type)별로 모양(shape)을 달리했을 때
> # Scatter Plot by Type, differenct Shapes > ggplot(data=Cars93, aes(x=Weight, y=MPG.highway, shape=Type)) + + geom_point(size=3) + + ggtitle("Scatter Plot by Type, differenct Shapes")
|
(3) 차종(Type)별로 층(facet_grid)을 나누어서 산포도를 그릴 때
> # Scatter Plot by Type, using facet_grid > ggplot(data=Cars93, aes(x=Weight, y=MPG.highway)) + + geom_point(size=3, shape=19) + + facet_grid(Type ~.) + + ggtitle("Scatter Plot by Type, using facet_grid")
|
다음으로, 산포도에 선형 회귀선 (신뢰구간 95%)을 적합시켜보겠습니다.
> # Scatter Plot with linear regression line > ggplot(data=Cars93, aes(x=Weight, y=MPG.highway)) + + geom_point(shape=19, size=3, colour="red") + # shape 19: solid circle + stat_smooth(method=lm, level=0.95) + + ggtitle("Scatter Plot: Linear Regression Line with Confidence Level 95%")
|
아래는 산포도에 회귀선을 적합시켰는데, 위와는 다르게 신뢰구간은 뺀 경우입니다.
> ggplot(data=Cars93, aes(x=Weight, y=MPG.highway)) + + geom_point(shape=19, size=3, colour="red") + # shape 19: solid circle + stat_smooth(method=lm, se=FALSE) + + ggtitle("Scatter Plot: Linear Regression Line without Confidence Level")
|
산포도에 선을 적합시킬 때 선형회귀선말고도 loess(locally weighted polynomial) 를 써서 비모수 회귀(Nonparametric regression) 선을 적합시킬 수도 있습니다.
> # Scatter Plot with loess(locally weighted polynomial) > ggplot(data=Cars93, aes(x=Weight, y=MPG.highway)) + + geom_point(shape=19, size=3, colour="red") + # shape 19: solid circle + stat_smooth(method=loess, level=0.95) + + ggtitle("Scatter Plot: loess Line with Confidence Level 95%")
|
많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
R ggplot2 이차원 밀도 그래프(2D Density Plot) (stat_density2d()) (0) | 2015.08.23 |
---|---|
R ggpolt2 선그래프, 시계열그래프 (Line Graph) (geom_line()) (7) | 2015.08.22 |
R 모자이크 그림: vcd패키지 mosaic() 함수 (2) | 2015.08.22 |
R ggplot2 원그림(geom_bar() + coord_polar()) (0) | 2015.08.22 |
R ggplot2 막대그림(geom_bar()) (5) | 2015.08.22 |