안녕하십니까? 웹R(web-r.org)의 운영자 문건웅입니다. 오늘 올릴 글은 Kormaps 패키지를 이용한 단계구분도 쉽게 그리기(2)로써 leaflet패키지를 이용하여 interactive map을 쉽게 구현할 수 있도록 하는 내용입니다. 도움이 되셨다면 댓글 부탁드립니다. 

leaflet을 이용한 동적인 지도

RStudio에서 제작한 leaflet 패키지는 자바스크립트를 이용하여 동적인 지도를 그려줍니다. 하지만 leaflet패키지를 이용하여 지도를 그리기 위하여는 palette와 pop-up window 의 내용을 미리 지정해주어야 합니다. 대한민국 시/도별 인구통계지도인 korpopmap1으로 지도를 그리려면 다음과 같이 합니다.

palette 와 pop-up window 지정

require(Kormaps)
require(leaflet)
mymap <- korpopmap1
mypalette <- colorNumeric(palette="Reds",domain=mymap$총인구_명)
## Loading required package: sp
mypopup <- paste0(mymap@data$name,": ",mymap@data$총인구_명)

leaflet 을 이용한 interactive map 출력

다음의 코드로 단계구분도를 지도위에 출력할 수 있습니다. 지도는 축소/확대가 가능하며 클릭시 pop-up 윈도우로 인구명을 보여줍니다.

leaflet(mymap) %>%
    addTiles() %>%
    addPolygons(stroke=FALSE, 
              smoothFactor = 0.2,
              fillOpacity = .8, 
              popup=mypopup,
              color= ~mypalette(mymap@data$총인구_명))

multi-layer map의 출력

하나의 지도에 여러개의 지도를 중첩하여 그릴 수 있습니다. “단독주택_호”와 “아파트_호”를 같이 출력하려면 다음과 같이 합니다.

housepalette <- colorNumeric(palette="Reds",domain=mymap$단독주택_호)
housepopup <- paste0(mymap@data$name,"(단독주택): ",mymap@data$단독주택_호)
aptpalette <- colorNumeric(palette="Blues",domain=mymap$아파트_호)
aptpopup <- paste0(mymap@data$name,"(아파트): ",mymap@data$아파트_호)


multilayer_map<-leaflet(mymap) %>%
    addTiles() %>%
    addPolygons(stroke=FALSE, 
              smoothFactor = 0.2,
              fillOpacity = .8, 
              popup=housepopup,
              color= ~housepalette(mymap@data$단독주택_호),
              group="단독주택") %>%
    addPolygons(stroke=FALSE, 
              smoothFactor = 0.2,
              fillOpacity = .8, 
              popup=aptpopup,
              color= ~aptpalette(mymap@data$아파트_호),
              group="아파트") %>%
    addLayersControl(
      baseGroups=c("단독주택", "아파트"),
      position = "bottomleft",
      options = layersControlOptions(collapsed = FALSE)
      ) 
    
multilayer_map

새로운 함수의 정의 : myleaflet()

하지만 여러 개의 layer를 만들기 위해 위와 같은 과정을 일일이 거치는 것은 매우 번거롭습니다. myleaflet() 함수는 map과 지도를 그릴 열 이름을 인수로 주면 여러 개의 layer를 갖는 leaflet 지도를 그려줍니다. myleaflet()함수는 여러 layer를 가지는 동적인 지도를 쉽게 구현해줍니다. 이 단계구분도는 축소/확대가 가능하고 클릭시 행정구역과 인구통계정보를 보여줍니다. 또한 전에 사용했던 submap함수까지 사용하면 더욱 간단히 지도를 그릴 수 있습니다.

myleaflet(submap(korpopmap3,c("전라","광주")),choices=c("남자_명","여자_명","주택_계_호"))

pusan=myleaflet(submap(korpopmap3,"부산"),choices=c("남자_명","여자_명","주택_계_호"))
pusan

interactive map 저장

leaflet map을 html페이지로 저장할 수 있습니다. htmlwidgets패키지의 saveWidget()함수를 쓰면 됩니다.

require(htmlwidgets)
## Loading required package: htmlwidgets
saveWidget(widget=pusan,file="pusan.html")

이 글이 도움이 되셨다면 댓글을 달아주십시요. 댓글이 충분할 경우 도움이 되는 것으로 알고 세번째 글을 게시하겠습니다.

이 글의 일부는 Sharon Machlis의 다음글을 참조했슴을 밝힙니다.

http://www.computerworld.com/article/3038270/data-analytics/create-maps-in-r-in-10-fairly-easy-steps.html?nsdr=true&page=3