R ggplot2 버블 그래프 (Bubble Chart) : geom_point(), scale_size_area()
R 분석과 프로그래밍/R 그래프_시각화 2015. 9. 2. 23:46이전 포스팅에서 x축과 y축의 값에 따라 산점도 그리는 방법을 알아보았다면, 이번 포스팅에서는 여기에 더해서 z라는 제 3의 변수에 비례해서 점의 크기를 변화시켜서 그린 그래프가 버블 그래프 (Bubble Chart) 입니다. 산점도가 2차원의 그래프(단, 색깔이나 모양 조건을 추가하면 3차원 정보 제공 가능)라면, 버블 그래프 (Bubble Chart)는 3차원의 그래프가 되어 지면에 보다 많은 정보량을 제공할 수 있는 장점이 있습니다.
ggplot2에서는 산점도, 점 그래프를 그리는 geom_point() 함수와 함께 scale_size_area() 함수를 같이 사용하면 버블 그래프 (Bubble Chart)를 그릴 수가 있습니다.
MASS 패키지의 Cars93 데이터 프레임 내에 차 모델명(Model), 차종(Type), 무게(Weight), 고속도로연비(MPG.highway), 가격(Price)의 5개 변수를 사용하여 버블 그래프를 그려보겠습니다. 데이터가 너무 많으면 버블 그래프를 그릴 때 겹쳐 보여서 보기 싫으므로 차종(Type)에서 "compact"와 "large"의 두 종만 선별해서 예를 들어보겠습니다.
> 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 ... > levels(Cars93$Type) [1] "Compact" "Large" "Midsize" "Small" "Sporty" "Van"
> Cars93_sample <- subset(Cars93, + select = c("Model", "Type", "Weight", "MPG.highway", "Price"), + subset = (Type %in% c("Compact", "Large"))) > Cars93_sample Model Type Weight MPG.highway Price 3 90 Compact 3375 26 29.1 7 LeSabre Large 3470 28 20.8 8 Roadmaster Large 4105 25 23.7 10 DeVille Large 3620 25 34.7 12 Cavalier Compact 2490 36 13.4 13 Corsica Compact 2785 34 11.4 18 Caprice Large 3910 26 18.8 20 Concorde Large 3515 28 18.4 21 LeBaron Compact 3085 28 15.8 22 Imperial Large 3570 26 29.5 25 Spirit Compact 2970 27 13.3 30 Vision Large 3490 28 19.3 33 Tempo Compact 2690 27 11.3 38 Crown_Victoria Large 3950 26 20.9 43 Accord Compact 3040 31 17.5 52 Town_Car Large 4055 26 36.1 55 626 Compact 2970 34 16.5 58 190E Compact 2920 29 31.9 65 Altima Compact 3050 30 15.7 68 Achieva Compact 2910 31 13.5 71 Eighty-Eight Large 3470 28 20.7 74 Sunbird Compact 2575 31 11.1 77 Bonneville Large 3495 28 24.4 78 900 Compact 2775 26 28.7 82 Legacy Compact 3085 30 19.5 90 Passat Compact 2985 30 20.0 92 240 Compact 2985 28 22.7 |
ggplot2의 geom_point()와 scale_size_area() 함수를 사용하여 버블 그래프 (bubble chart)를 그려보겠습니다. ggplot2는 별도의 설치와 호출이 필요한 패키지이므로 아래와 같이 install.packages()와 library()로 설치 및 호출을 먼저 해야 합니다.
> install.packages("ggplot2") Installing package into ‘C:/Users/user/Documents/R/win-library/3.2’ (as ‘lib’ is unspecified) trying URL 'http://cran.rstudio.com/bin/windows/contrib/3.2/ggplot2_1.0.1.zip' Content type 'application/zip' length 2676272 bytes (2.6 MB) downloaded 2.6 MB package ‘ggplot2’ successfully unpacked and MD5 sums checked The downloaded binary packages are in C:\Users\user\AppData\Local\Temp\RtmpKeoxEa\downloaded_packages > library(ggplot2) |
x축에는 무게(Weight)를, y축에는 고속도로연비(MPG.highway)를, 원의 크기는 가격(Price)를 설정하였습니다. 그리고 겹치는 부분이 있어서 alpha=0.5 로 해서 반투명하게 하였습니다. scale_size_area 에서 원의 크기의 최대값(max)을 15개 한정을 지었으며, geom_text() 함수를 활용해 vjust=1로 해서 x축 값에 align되고 y값은 MPG.highway값에 살짝 조정을 가해서 label로는 모델명(Model) 변수값을 가져다가 라벨링을 하였습니다.
> # Bubble chart with scale_size_area and label > ggplot(Cars93_sample, aes(x=Weight, y=MPG.highway)) + + geom_point(aes(size=Price), shape=21, colour="grey90", fill="yellow", , alpha=0.5) + + scale_size_area(max_size = 15) + # 범례 없애려면 guide=FALSE + geom_text(aes(y=as.numeric(MPG.highway)-sqrt(Price)/10, label=Model), + vjust=1, colour="grey40", size=3) + + ggtitle("Bubble chart with scale_size_area and label") |
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 그래프_시각화' 카테고리의 다른 글
R ggplot2 x축, y축 설정 : coord_fixed(), scale_x_continuous(), scale_y_continuous() (4) | 2015.09.04 |
---|---|
R ggplot2 집단간 비교를 위한 면 분할(facet, Trellis) : facet_grid(), facet_wrap() (4) | 2015.09.03 |
R Graphics 패키지 pairs() 함수를 사용한 산점도 행렬 그리기 (0) | 2015.09.01 |
R corrplot 상관계수 행렬 Plot (correlation matrix plot) (7) | 2015.09.01 |
R ggplot2 막대그래프(Bar Chart) 양수, 음수 색상 다르게 하기 (geom_bar()) (0) | 2015.08.29 |