안녕하십니까? 웹R(web-r.org)의 운영자 문건웅입니다. 오늘 올릴 글은 Kormaps 패키지를 이용한 단계구분도 쉽게 그리기(2)로써 leaflet패키지를 이용하여 interactive map을 쉽게 구현할 수 있도록 하는 내용입니다. 도움이 되셨다면 댓글 부탁드립니다.
RStudio에서 제작한 leaflet 패키지는 자바스크립트를 이용하여 동적인 지도를 그려줍니다. 하지만 leaflet패키지를 이용하여 지도를 그리기 위하여는 palette와 pop-up window 의 내용을 미리 지정해주어야 합니다. 대한민국 시/도별 인구통계지도인 korpopmap1으로 지도를 그리려면 다음과 같이 합니다.
require(Kormaps)
require(leaflet)
mymap <- korpopmap1
mypalette <- colorNumeric(palette="Reds",domain=mymap$총인구_명)
## Loading required package: sp
mypopup <- paste0(mymap@data$name,": ",mymap@data$총인구_명)
다음의 코드로 단계구분도를 지도위에 출력할 수 있습니다. 지도는 축소/확대가 가능하며 클릭시 pop-up 윈도우로 인구명을 보여줍니다.
leaflet(mymap) %>%
addTiles() %>%
addPolygons(stroke=FALSE,
smoothFactor = 0.2,
fillOpacity = .8,
popup=mypopup,
color= ~mypalette(mymap@data$총인구_명))
하나의 지도에 여러개의 지도를 중첩하여 그릴 수 있습니다. “단독주택_호”와 “아파트_호”를 같이 출력하려면 다음과 같이 합니다.
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
하지만 여러 개의 layer를 만들기 위해 위와 같은 과정을 일일이 거치는 것은 매우 번거롭습니다. myleaflet() 함수는 map과 지도를 그릴 열 이름을 인수로 주면 여러 개의 layer를 갖는 leaflet 지도를 그려줍니다. myleaflet()함수는 여러 layer를 가지는 동적인 지도를 쉽게 구현해줍니다. 이 단계구분도는 축소/확대가 가능하고 클릭시 행정구역과 인구통계정보를 보여줍니다. 또한 전에 사용했던 submap함수까지 사용하면 더욱 간단히 지도를 그릴 수 있습니다.
myleaflet(submap(korpopmap3,c("전라","광주")),choices=c("남자_명","여자_명","주택_계_호"))
pusan=myleaflet(submap(korpopmap3,"부산"),choices=c("남자_명","여자_명","주택_계_호"))
pusan
leaflet map을 html페이지로 저장할 수 있습니다. htmlwidgets패키지의 saveWidget()함수를 쓰면 됩니다.
require(htmlwidgets)
## Loading required package: htmlwidgets
saveWidget(widget=pusan,file="pusan.html")
이 글이 도움이 되셨다면 댓글을 달아주십시요. 댓글이 충분할 경우 도움이 되는 것으로 알고 세번째 글을 게시하겠습니다.
이 글의 일부는 Sharon Machlis의 다음글을 참조했슴을 밝힙니다.