…さあ、leafletの出番です
install.packages("leaflet")
library(leaflet)
install.packages("devtools")
install_github("rstudio/leaflet")
library(leaflet)
leaflet() %>%
addTiles()
leaflet() %>%
addTiles() %>%
setView(lng=135,lat=35,zoom=7)
以下の様な構造
%>%
)を使わなくても可能プロット用データを準備
df <- data.frame(
id = 1:5,
lng = rnorm(5,mean=135,sd=0.5),
lat = rnorm(5,mean=35,sd=0.5),
pop = c("kosaki","chitoge","tsugumi","marika","yui")
)
knitr::kable(df)
id | lng | lat | pop |
---|---|---|---|
1 | 135.1914 | 34.40086 | kosaki |
2 | 135.1606 | 35.72415 | chitoge |
3 | 135.5471 | 34.89138 | tsugumi |
4 | 134.6126 | 34.36496 | marika |
5 | 135.3446 | 35.04921 | yui |
m <- leaflet(df) %>% addTiles()
m
m %>%
addMarkers(lng=~lng,lat=~lat)
#radiusは半径(メートル単位)、weightは線幅
m %>%
addCircles(lng=~lng,lat=~lat,radius=1000,color="#09f",weight=20)
#radiusはピクセル単位
m %>%
addCircleMarkers(lng=~lng,lat=~lat,radius=20,color="#09f",weight=2)
m %>%
addPopups(lng=~lng,lat=~lat,popup=~pop)
m %>%
addPolylines(lng=~lng,lat=~lat,color="#f30",weight="10")
以下のソースから線やポリゴンを地図上にもってくることが可能です(公式ドキュメントより):
maps::map()
)※ 詳しくは強い人に聞いてください…
# 詳細は ?addControl を参照
m %>%
addCircleMarkers(~lng, ~lat, radius=~2*nchar(as.character(pop)),
popup=~pop, stroke=FALSE, fillOpacity=0.8) %>%
addPolylines(~lng, ~lat, dashArray="10,10") %>%
addPopups(~mean(lng), ~mean(lat),
popup='ぞうさん<br/><img src="user.png" width=50>')
df2 <- data.frame(id=1:1000, lng=135+rnorm(1000), lat=35+rnorm(1000))
leaflet(df2) %>% addTiles() %>%
addMarkers(~lng, ~lat, label=~paste0(id,"番"),
clusterOptions = markerClusterOptions())
# special thanks to @yutannihilation!!
atr <- "<a href='http://maps.gsi.go.jp/development/ichiran.html' target='_blank'>地理院タイル</a>"
leaflet() %>%
addTiles("http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png", attribution = atr) %>%
setView(135, 35, zoom=9)
leaflet() %>%
addTiles(group="OSM") %>%
addTiles("http://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png", attribution = atr, group="GSI") %>%
addLayersControl(baseGroups=c("OSM","GSI"), options=layersControlOptions(collapsed = FALSE))
df3 <- mutate(df2, atnd=sample(c("kosaki","chitoge"),1000,replace = TRUE))
leaflet(df3) %>% addTiles() %>%
addCircleMarkers(~lng, ~lat, group="kosaki", color="#f63", stroke=FALSE, data=filter(.data=df3, atnd=="kosaki")) %>%
addCircleMarkers(~lng, ~lat, group="chitoge", color="#96f", stroke=FALSE, data=filter(.data=df3, atnd=="chitoge")) %>%
addLayersControl(overlayGroups=c("kosaki","chitoge"))
pal <- colorNumeric(palette="Blues", domain=df3$id)
leaflet(df3) %>% addTiles() %>%
addCircleMarkers(~lng, ~lat, color=~pal(id), stroke=FALSE) %>%
addLegend(position='topright', pal=pal, values=~id)
palfac <- colorFactor(palette=c("yellow","blue"), domain=df3$atnd)
leaflet(df3) %>% addTiles() %>%
addCircleMarkers(~lng, ~lat, color=~palfac(atnd), stroke=FALSE) %>%
addLegend(position='topright', pal=palfac, values=~atnd)
palquan <- colorQuantile(palette="YlGnBu", domain=df3$id, n=3)
leaflet(df3) %>% addTiles() %>%
addCircleMarkers(~lng, ~lat, color=~palquan(id), stroke=FALSE) %>%
addLegend(position='bottomright', pal=palquan, values=~id)
https://rpubs.com/kazutan/typhoon5
https://rpubs.com/kazutan/jssp2015_leaflet
以下の様な構造になっています:
Category | Add_function |
---|---|
tile | addTiles, addProviderTiles |
marker | addMarkers, addCircleMarkers |
popup | addPopups |
shape | addPolygons, addPolylines, addCircles, addRectangles |
geojson | addTopoJSON |
topjson | addTopoJSON |
control | addControl |
addMarkers
やaddCircleMarkers
ではlngとlatすら省略可能
setViews
も省略可能
?colorNumeric
読んだほうがいいかも実はこれが一番の問題かも - leafletで遊ぶためには必須 - でもどうやって? - ggmap::geocode()
が楽 - GoogleAPIで住所からlonlatを出してくれます - ただし一日に2500のAPI制限があります - 特定できなかった場合はNA
を返します
いろいろ設定も可能
leaflet(df) %>% addTiles() %>% addMarkers(~lng,~lat) %>%
addMiniMap(position="bottomright")
わざわざ他のパッケージ呼ばなくてもOK!
leaflet(df) %>% addTiles() %>% addMarkers(~lng,~lat) %>%
addScaleBar(position="bottomleft")
インタラクティブ!!
leaflet(df) %>% addTiles() %>% addMarkers(~lng,~lat) %>%
addMeasure(position = "topright", primaryLengthUnit = "meters",
primaryAreaUnit = "sqmeters", activeColor = "#3D535D",
completedColor = "#7D4479")
マーカーが楽しくなる!
iconSet <- awesomeIconList(
beer = makeAwesomeIcon(icon='ion-beer', library = "ion"),
power = makeAwesomeIcon(icon='ion-power', library = "ion")
)
leaflet(df) %>% addTiles() %>% addMarkers(~lng,~lat) %>%
addAwesomeMarkers(lng=~lng,lat=~lat,icon=iconSet)
http://rpubs.com/kazutan/leaflet_slide