GISで日本を描写すると縦長になり、印刷物に合わないことがあります。その場合には、沖縄が左上に位置するとちょうどいい場合があります。

Rで沖縄が左上にくるようなコロプレスマップを作成する方法をご紹介します。

データ

農林水産省の獣医師の2018年データを使います。犬猫獣医師として届出している人数を使用します。

https://www.maff.go.jp/j/tokei/kouhyou/zyui/index.html

ライブラリ

NipponMapを使用します。NipponMapはシンプルで、都道府県コード順のベクターをインプットさせると色塗りします。ベクターは、色の情報を持ったものです。以下のような書き方です。

JapanPrefMap(col=colors_japan)

colors_japanは、”#ABDDA4″ “#2B83BA”のような色情報を持っています。

都道府県コードはこちら(wikipedia)をご覧ください。

ただ、ラベルをしっかりつけようとするとすごく大変です。

コード

5色に色分けすることを考えます。cutで5分割します。ラベルに5分割の範囲を○○~○○という形で書きたいので、それを実現するところの処理が途中に入っています。

文字をコンマで分ける処理、かっこを除く処理と、角がある括弧を除く処理が含まれています。

df <- read.csv("jyuui.csv", encoding = "UTF-8")

#5色反転
library(RColorBrewer)
mycolors <- rev(brewer.pal(5, "Spectral"))
#5段階分割
df$levels<- cut(df$num, 
                 breaks=5)
#5段階分割+色を指定
df$cutted <- cut(df$num, 
                 breaks=5,
                 labels=mycolors)

# levelを記載したlegend用のデータフレームを作る
# 文字をコンマで分ける処理
library(stringr)
num <- str_split(levels(df$levels), pattern=",")
# かっこを除く処理
for (i in 1:5) {
  num[[i]] <- gsub("[()]", "", num[[i]])
}
# 角がある括弧を除く処理
for (i in 1:5) {
  num[[i]] <- gsub("\\[|\\]", "", num[[i]])
}
# 空のデータフレームを作る
n <- 2
result <- data.frame(matrix(rep(NA, n), nrow=1))[numeric(0), ]
colnames(result) <- c("column1", "column2")
# 空のデータフレームに処理した数字を入れていく
for (i in 1:5) {
  result[i,1] <- as.numeric(num[[i]][1])
  result[i,2] <- as.numeric(num[[i]][2])
}
# 数字をつなぎ合わせる
result$label <- paste0(result$column1,"~",result$column2)

# ファクターを文字にする
colors_japan <- as.character(df$cutted)

# 色塗りを行う
library(NipponMap)
par(mar=c(2,2,2,2))
JapanPrefMap(col=colors_japan)

# レジェンドとタイトルつける
legend('topleft', result$label, fill=levels(df$cutted))
title(main = "犬猫獣医師数 2018")
category