Rで地図を描く時便利な「maps, leaflet, NipponMap」


地図を使ったデータの可視化って結構厄介でめんどくさい。
でも情報としては大変に伝わりやすいし、議論も行いやすい。



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/173511bd-dad1-5015-912d-79f33447d304.png)





Rで地図を描くためのパッケージをちょこっと調べたところ「[ggmap](https://map-rfun.library.duke.edu/01_ggmap_georef.html)」が便利な様子だが...




#ggmap、クレジットカードが必要

```r
library(ggmap)
get_map("Durham North Carolina", maptype = "roadmap", zoom = 10) 
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/b3f315c4-bd82-1849-26e6-8bc286ea77ae.png)

APIkeyが必要。
別にお金はかからないみたいだけど無用に使われないようになのか[クレジットカードの登録](https://www.r-bloggers.com/2018/10/geocoding-with-ggmap-and-the-google-api/)が必要になる

API keyめんどくさくね？



#そこで「maps」



```r
library(maps)
#help(package='maps')
map()
```

太平洋中心世界地図が表示できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/862cab8e-ae7b-9ff9-800b-ee87fa2b090d.png)


国コード指定でzoomしたり

```r
map('usa')
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/bb9aa7a7-bab9-4a60-7a7f-0b337ef59049.png)



描画エリアに枠を付けたり

```r
map('japan')
map.axes()
```



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/75897091-e905-b183-5a5a-8df30ed2d543.png)



```r
map('usa')
box()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/4a68f24c-2a6f-4215-fd45-da1efd3da690.png)



日本の情報も確認したくなったらmapdataを追加インストールする


```r
library(mapdata)
map('japan')
map.axes()
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/14c300be-469b-e9b9-f24a-8fdf4f2d8856.png)


interiorが境を表示するオプション

```r
map("japan", interior = FALSE)
map("japan", boundary = FALSE, lty = 2, add = TRUE)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/59abbb53-540f-3474-c583-82c07a616a26.png)


経度緯度を調べるには[ココを使う](https://fukuno.jig.jp/app/printmap/latlngmap.html#11/35.655622/139.888229/&base=std&ls=std&disp=1&vs=c0j0l0u0f1)
いつものplotのようにxlim,ylimが経度緯度に対応しているので、東京周辺を範囲としてやれば


```r
map("japan", interior = FALSE,xlim = c(138,141), ylim = c(34,36))
map("japan", boundary = FALSE, lty = 2, add = TRUE)
box()
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/f6f1776c-3075-4204-6399-65de81defa8b.png)




pointsやtextも位置座標をもとに加えられるのでポインタを置くこともできる

```r
points(139.888229,35.655622,col="red",pch=20)
text(139.888229,35.755622,"urayasu",col="red")
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/052bd55c-ebcc-658a-5ea7-fcf8c7f78e05.png)




#白黒じゃ味気ない人に「leaflet」


背景が地図様になり、mapにピンを刺すaddMarkersなどもある。
描画範囲も与えたデータの範囲から自動でxlim,ylimが変化する。
さらには左上の拡大縮小を使って確認したい範囲に絞ることも簡単になる。

```r
library(leaflet)
library(modeldata)

data(ames, package = "modeldata")

m <- leaflet()
m <- addTiles(m)
m <- addMarkers(m, 
                lng=ames$Longitude[1:10],
                lat=ames$Latitude[1:10], 
                popup=ames$Fence[1:10])
m
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/173511bd-dad1-5015-912d-79f33447d304.png)


#日本だけなら「NipponMap」


```r

library(NipponMap)
library(foreign)


population_jpn <- read.dbf(system.file("shapes/jpn.dbf", package="NipponMap"))

population_jpn

par(bg = "white")

jpn_map <- JapanPrefMap(col = sample(colours(), 47), border = gray(.8), axes = TRUE)
#JapanPrefMap(col = "grey")

symbols(jpn_map, 
        circles = sqrt(population_jpn$population*0.00000001), 
        inches = FALSE,
        fg = "black", 
        bg = "blue", 
        add = TRUE)

```

人口に対して円を描く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/275572/e1eab4fb-69d7-2c11-6277-03dea2b84f6e.png)



#以上


べんり