Rで解析:ggplot2でデータ付き地図を作成「geofacet」パッケージ


投稿日: Rの解析に役に立つ記事

地図データの準備に手間がかかりますが、用意できれば非常に有効なパッケージと考えます。日本地図データの作成例と共にパッケージを紹介します。

パッケージバージョンは0.1.5。windows 10のR version 3.4.1で動作を確認しています。


日本地図データ例

お好みに合わせて、各都道府県の位置を調整してください。なお、本パッケージの位置は整数で指定する必要があります。

#日本地図データの作成
JapanGrid <- data.frame(
  row = c(1, 3, 4, 5, 6, 7, 8, 4, 5, 6,
        7, 8, 9, 7, 8, 9, 7, 8, 9, 6,
        7, 8, 9, 8, 9, 8, 9, 10, 8, 9,
        8, 9, 8, 9, 11, 12, 11, 12, 9, 9,
        10, 11, 9, 10, 11, 9, 12),
  col = c(16, 16, 16, 16, 16, 16, 16, 15,
        15, 15, 15, 15, 15, 14, 14, 14,
        13, 13, 13, 12, 12, 12, 12, 11,
        11, 10, 10, 10, 9, 9, 8, 8, 7, 7,
        8, 8, 7, 7, 6, 4, 4, 4, 3, 3, 3, 2, 1),
  code = c("北海道", "青森県", "岩手県", "宮城県", "福島県",
         "茨城県", "千葉県", "秋田県", "山形県", "新潟県",
         "栃木県", "埼玉県", "東京都", "群馬県", "山梨県",
         "神奈川県", "富山県", "長野県", "静岡県", "石川県",
         "福井県", "岐阜県", "愛知県", "滋賀県", "三重県",
         "京都府", "奈良県", "和歌山県", "兵庫県", "大阪府",
         "鳥取県", "岡山県", "島根県", "広島県", "香川県", "徳島県",
         "愛媛県", "高知県", "山口県", "福岡県", "大分県", "宮崎県",
         "佐賀県", "熊本県", "鹿児島県", "長崎県", "沖縄県"),
  name = c("北海道", "青森県", "岩手県", "宮城県", "福島県",
         "茨城県", "千葉県", "秋田県", "山形県", "新潟県",
         "栃木県", "埼玉県", "東京都", "群馬県", "山梨県",
         "神奈川県", "富山県", "長野県", "静岡県", "石川県",
         "福井県", "岐阜県", "愛知県", "滋賀県", "三重県",
         "京都府", "奈良県", "和歌山県", "兵庫県", "大阪府",
         "鳥取県", "岡山県", "島根県", "広島県", "香川県", "徳島県",
         "愛媛県", "高知県", "山口県", "福岡県", "大分県", "宮崎県",
         "佐賀県", "熊本県", "鹿児島県", "長崎県", "沖縄県"))

#作業フォルダに日本地図データを保存
write.csv(JapanGrid, "JapanGrid.csv", row.names = FALSE)
########

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("geofacet")

コマンドの紹介

詳細はコマンド、パッケージのヘルプを確認してください。体裁はggplot2のコマンドで調整可能です。

#パッケージの読み込み
library("geofacet")
library("ggplot2")
library("tcltk")

#地図データを読み込む
JapanGrid <- read.csv(paste0(as.character(tkgetOpenFile(title = "ファイルを選択",
                                                       filetypes = '{"ファイル" {".*"}}',
                                                       initialfile = c("*.*")))))
########

###データ例を作成#####
TestJPN <- data.frame(Year = factor(rep(2015:2017, times = nrow(JapanGrid))),
                      Temp = sample(10:20, size = nrow(JapanGrid)*3, replace = TRUE),
                      Name = rep(JapanGrid[, 4], each = 3))
########

#地図データを表示:grid_previewコマンド
grid_preview(JapanGrid)

#地図データを利用してデータをプロット:facet_geoコマンド
#データの分割方法:facetsオプション;facet_wrapコマンドと同じ
#地図データを指定:gridオプション
ggplot(TestJPN, aes(x = Year, y = Temp, group = Name, col = Name)) +
  geom_line(show.legend = FALSE, size = 1.5) +
  facet_geo(facets = ~ Name, grid = JapanGrid) +
  scale_x_discrete(labels = function(x) paste0("'", substr(x, 3, 4))) +
  scale_y_continuous(labels = function(x) format(x, 2)) +
  labs(title = "2015-2017 各都道府県 仮想年平均気温") +
  theme(title = element_text(colour = "#ffffe0"),
        axis.title = element_text(colour = "#ffffe0"),
        axis.text = element_text(colour = "#ffffe0"),
        strip.text.x = element_text(size = 8),
        strip.background = element_rect(colour = "black", fill = "white"),
        axis.text.y = element_text(size = 5),
        panel.grid = element_blank(), 
        panel.background = element_rect(fill = "lightgray"),
        plot.background = element_rect(fill = "#0a0a0a"))

#参考:棒グラフで表示
ggplot(TestJPN, aes(x = Year, y = Temp, group = Name, fill = Name)) +
  geom_col(show.legend = FALSE) +
  facet_geo(facets = ~ Name, grid = JapanGrid) +
  scale_x_discrete(labels = function(x) paste0("'", substr(x, 3, 4))) +
  scale_y_continuous(labels = function(x) format(x, 2)) +
  labs(title = "2015-2017 各都道府県 仮想年平均気温 棒グラフ") +
  theme(title = element_text(colour = "#ffffe0"),
        axis.title = element_text(colour = "#ffffe0"),
        axis.text = element_text(colour = "#ffffe0"),
        strip.text.x = element_text(size = 8),
        strip.background = element_rect(colour = "black", fill = "white"),
        axis.text.y = element_text(size = 5),
        panel.grid = element_blank(), 
        panel.background = element_rect(fill = "lightgray"),
        plot.background = element_rect(fill = "#0a0a0a"))

出力例

画像をクリックすると拡大できます。

・grid_previewコマンド

・地図データを利用してデータをプロット:facet_geoコマンド

・参考:棒グラフで表示


年甲斐もなく、映画『ノーゲーム・ノーライフ ゼロ』に号泣でした。エンディングロールの「THERE IS A REASON」が終わるまで涙腺崩壊です。少しでも、あなたの解析が楽になりますように!!

スポンサードリンク

おすすめコンテンツ


スポンサードリンク