Yoshi Nishikawa Blog

医学となにかのインタラクティブ

Rのggplot2で福島県南相馬市の地図を描く~もうすぐ野馬追

ggplot2で南相馬市の地図を描きたい

福島県南相馬市の方から相談を受け、Rの作図をしました。

こちらでは、南相馬市と、福島第一原子力発電所を地図上にプロットします。

パッケージは、

jpndistrict package | R Documentation

sfとggplot2、geosphereで作図を行います。

#install these packages if needed
#install.packages("jpndistrict")
#install.packages("sf")
#install.packages("geosphere")
#install.packages("tidyverse")

library(jpndistrict)
library(sf)
library(geosphere)
library(tidyverse)

都道府県・市区町村の情報を取得

地方公共団体コードは以下を参照し、はじめの五桁を使用する。

コードは6桁の数字からなり、上2桁はJIS X 0401に定められた都道府県コード、続く3桁と合わせた上5桁がJIS X 0402に定められた市区町村コード及び一部事務組合等コード、最後の1桁は誤記入・誤入力を防ぐための検査数字(チェックディジット)です。

地方公共団体コード - 福島県ホームページ

#Fukushima: Prefectural code 7
FKS <- jpn_pref(pref_code = 7)

#これでは宮城県が含まれないので、足し合わせたものを作成する
FKS <- c(4,7) %>% map(~jpndistrict::jpn_pref(pref_code = .)) %>% reduce(rbind) %>% 
  st_simplify(dTolerance = 0.001)

#Minamisoma (JIS code 07212)
Minamisoma <- jpn_cities(jis_code = "07212")

地図に掲載する点を作成する

緯度経度の取得は以下などを参考に。

support.google.com

##Fukushima Daiichi nuclear power plant
FDNPP <- data.frame(longitude=c(141.033611), latitude=c(37.421389))
FDNPP_sf <- st_as_sf(FDNPP, coords = c("longitude", "latitude"), 
                     crs = 4326, agr = "constant")

##MMGH
MMGH <- data.frame(longitude=c(140.9851348), latitude=c(37.6375094))
MMGH_sf <- st_as_sf(MMGH, coords = c("longitude", "latitude"), 
                   crs = 4326, agr = "constant")

位置を微調整

gglocatorなどもありますが、 手作業で位置をずらしてみました。

#deciding map range using Miharu Town location
mapRange <- c(range(st_coordinates(Minamisoma)[,1]),range(st_coordinates(Minamisoma)[,2]))

mapX <- 0.1
mapY <- 0.15

#Main figure

FKS %>% 
  ggplot() +
  geom_sf(color="white") +
  geom_sf(data=Minamisoma, color="black")+
  geom_sf(data = FDNPP_sf, color = "black", pch=13, size=4)+
  geom_sf(data = MMGH_sf, color = "black", pch=10, size=4)+
  coord_sf(datum = NA, xlim = c(mapRange[c(1)]-4*mapX, mapRange[c(2)]+1.5*mapX), ylim = c(mapRange[c(3)]-1.5*mapY, mapRange[c(4)]+1*mapY)) +
  theme_bw()+theme(axis.title = element_blank(), axis.text = element_blank()) -> p_fks

#p_fksで出力して、coord_sf内の引数を微調整

特定の場所を中心とする円を描く

福島第一原子力発電所からの距離に応じた円を付記する

#Distance from FDNPP
FDNPP_equidistant <- 
  map_dfr(c(2.5,5),
          function(x){
            destPoint(FDNPP, -180:180, x*10000) %>%
              as.tibble() %>%
              # どの等距離線るかを示すグループ番号
              mutate(group = as.character(x))
          })
# labels: distance from FDNPP
FDNPP_labels <- 
  map_df(c(2.5,5),
         function(x){
           destPoint(FDNPP, 260, x*10000) %>%
             as.tibble() %>%
             mutate(distance = paste0(x*10, " km"))
         })

完成

地図として出力する。

f:id:yoshi_nishikawa:20200601105857p:plain

p <- p_fks + 
  # plotting FDNPP 25km and 50km circles
  geom_path(data = FDNPP_equidistant, 
            aes(x=lon, y = lat, group = group),
            colour = "black", alpha=0.3, size = 1.5) +
  # plotting labels: distance from FDNPP
  geom_label(data = FDNPP_labels,
             aes(x=lon, y = lat, label = distance), size = 5) +
  annotate("text", x = as.numeric(FDNPP[1]), y = as.numeric(FDNPP[2])+0.04, label = "FDNPP", size = 5)+
  annotate("text", x = as.numeric(MMGH[1])-0.06, y = as.numeric(MMGH[2])+0.04, label = "MMGH", size = 5)+
  annotate("text", x = as.numeric(FDNPP[1])-0.10, y= as.numeric(FDNPP[2])+0.36, label = "Minamisoma", size = 5)
  
p+theme_bw(base_family = "HiraKakuProN-W3")+theme(axis.title = element_blank(), axis.text = element_blank())

#saveするときは
#ggsave(file = "Figure1_jp.png", plot = p)

もうすぐ野馬追

www.city.minamisoma.lg.jp

www.city.soma.fukushima.jp

あたたかくなってきました。もうすぐ野馬追です。

今年はコロナウイルスの影響で無観客なのか。