ggplotとjpndistrictで地図を書く①

まず必要となるパッケージをR studioに読み込みます。

library(tidyverse) #ggplot2などでグラフを作成する、データをきれいにするために使用
library(sf) #sf(simple features)のデータを扱うのに使用
library(jpndistrict) #元となるデータ

先ほど読み込んだパッケージ"jpndistrict"内に"jpn_cities"のデータセットが含まれています。これは区市町村レベルのデータセットで、その13番目が東京都です。
そこで13番目のデータを抽出します。ただし、島しょ地域が含まれていると、地図が見にくくなるため、今回は島しょ地域を除きます(54番目以降が島しょ地域)。

pref13 <- jpn_cities(13)[1:53, ]
ggplot(pref13) + geom_sf()

f:id:dilatedtomeetyou:20200622204919p:plain
東京都の地図

次にmutate関数を使って、先ほど作成した"pref13"に新たに"HealthCenter"という名前の変数(列)を作成し、そこに管轄となる保健所名を入れていきます。作成したものを新たに"tokyo"とします。

tokyo <- pref13 %>% 
  mutate(HealthCenter = case_when(
    city == "千代田区" ~ "千代田区", city == "中央区" ~ "中央区", 
    city == "港区" ~ "港区", city == "新宿区" ~ "新宿区", 
    city == "文京区" ~ "文京区", city == "台東区" ~ "台東区",
    city == "墨田区" ~ "墨田区", city == "江東区" ~ "江東区", 
    city == "品川区" ~ "品川区", city == "目黒区" ~ "目黒区", 
    city == "大田区" ~ "大田区", city == "世田谷区" ~ "世田谷区",
    city == "渋谷区" ~ "渋谷区", city == "中野区" ~ "中野区", 
    city == "杉並区" ~ "杉並区", city == "豊島区" ~ "豊島区", 
    city == "北区" ~ "北区", city == "荒川区" ~ "荒川区",
    city == "板橋区" ~ "板橋区", city == "練馬区" ~ "練馬区", 
    city == "足立区" ~ "足立区", city == "葛飾区" ~ "葛飾区", 
    city == "江戸川区" ~ "江戸川区", city == "八王子市" ~ "八王子市",
    city == "町田市" ~ "町田市", city == "立川市" ~ "多摩立川", 
    city == "武蔵野市" ~ "多摩府中", city == "三鷹市" ~ "多摩府中", 
    city == "青梅市" ~ "西多摩", city == "府中市" ~ "多摩府中",
    city == "昭島市" ~ "多摩立川", city == "調布市" ~ "多摩府中", 
    city == "小金井市" ~ "多摩府中", city == "小平市" ~ "多摩小平", 
    city == "日野市" ~ "南多摩", city == "東村山市" ~ "多摩小平",
    city == "国分寺市" ~ "多摩立川", city == "国立市" ~ "多摩立川",
    city == "福生市" ~ "西多摩", city == "狛江市" ~ "多摩府中",
    city == "東大和市" ~ "多摩立川", city == "清瀬市" ~ "多摩小平",
    city == "東久留米市" ~ "多摩小平", city == "武蔵村山市" ~ "多摩立川",
    city == "多摩市" ~ "南多摩", city == "稲城市" ~ "南多摩保健所",
    city == "羽村市" ~ "西多摩", city == "あきる野市" ~ "西多摩",
    city == "西東京市" ~ "多摩小平", city == "西多摩郡 瑞穂町" ~ "西多摩",
    city == "西多摩郡 日の出町" ~ "西多摩", 
    city == "西多摩郡 檜原村" ~ "西多摩",
    city == "西多摩郡 奥多摩町" ~ "西多摩"))
head(tokyo)
city_code city geometry HealthCenter
<chr>      <chr>     <S3: sfc_GEOMETRY>     <chr>
13101 	千代田区	<S3: sfc_GEOMETRY>	千代田区	
13102	中央区	<S3: sfc_GEOMETRY>	中央区	
13103	港区	<S3: sfc_GEOMETRY>	港区	
13104	新宿区	<S3: sfc_GEOMETRY>	新宿区	
13105	文京区	<S3: sfc_GEOMETRY>	文京区	
13106	台東区	<S3: sfc_GEOMETRY>	台東区	
6 rows

2.1 保健所ごとに色分けを行う

ggplot(tokyo) +
  geom_sf(aes(fill = HealthCenter), show.legend = FALSE)

f:id:dilatedtomeetyou:20200704201531p:plain
東京都地図(保健所色別)
保健所数が多すぎて、色の違いが分かりにくいです。

2.2 保健所の凡例を追加します。

ggplot(tokyo) +
  geom_sf(aes(fill = HealthCenter), show.legend = FALSE) + 
  geom_sf_label(aes(label = HealthCenter), size = 3, label.padding = unit(0.7, "mm"))
f:id:dilatedtomeetyou:20200915214531p:plain
東京都地図(保健所凡例付き)

保健所数が多すぎてみずらいです。

3.1 新たに点をプロットしたいときのデータの作成方法

myhome <- tibble::tribble(
  ~city,     ~lat,    ~lon,
  "My Home", 139.65, 35.62,
)

3.2 島しょ地域を除いた役場を抽出

df_office13 <- jpn_admins(13) %>% slice(1:172, 199)

3.3 点をプロットするのに2パターンある。一つ目は直接xyを入力する方法.2つめは事前に作っておいたデータを使う方法

ggplot() + 
  geom_sf(data = tokyo, mapping = aes(fill = city_code), show.legend = FALSE) + 
  geom_sf(data = df_office13, show.legend = FALSE, size = 0.1, alpha = 0.5) +
  geom_point(mapping = aes(x = 139.691, y = 35.689), color = "red") +
  geom_point(data = myhome, mapping = aes(x = lat, y = lon), 
             color = "white", shape = 2)

f:id:dilatedtomeetyou:20200704201844p:plain
東京都地図(区市町役所)