【R】Tile Grid Map

ggplot2を使うと、地図を含めて様々な図を表現できますが、今回はタイルマップを表示してみます。

ちょうど「Tutorial: a World Tile Grid Map in ggplot2」というのがあったので、これにて勉強させてもらいました。また、同ページでリンクのあった「The World Tile Grid Map」も参考にしました。

データは、世界地図をすでに編集してCSVファイルにしてくれているものを使わせてもらいました。

まずは、データを読み込んで、眺めてみます。

library(ggplot2)

worldtilegrid <- read.csv("worldtilegrid.csv")
head(worldtilegrid)
> head(worldtilegrid)
               name alpha.2 alpha.3 country.code    iso_3166.2     region      sub.region region.code sub.region.code  x  y
1       Afghanistan      AF     AFG            4 ISO 3166-2:AF       Asia   Southern Asia         142              34 22  8
2           Albania      AL     ALB            8 ISO 3166-2:AL     Europe Southern Europe         150              39 15  9
3           Algeria      DZ     DZA           12 ISO 3166-2:DZ     Africa Northern Africa           2              15 13 11
4            Angola      AO     AGO           24 ISO 3166-2:AO     Africa   Middle Africa           2              17 13 17
5        Antarctica      AQ     ATA           10 ISO 3166-2:AQ Antarctica            <NA>          NA              NA 15 23
6 Antigua & Barbuda      AG     ATG           28 ISO 3166-2:AG   Americas       Caribbean          19              29  7  4

ここでは、国の位置としてx, yを、国名をalpha.3を、地域としてregionを使います。

まずは、簡単にそれらしい地図を描いてみます。

ggplot(worldtilegrid, aes(x = x, y = y)) + geom_text(aes(label = alpha.3), size=3)

今度は、国名ではなくタイルで表示します。

mytheme <- theme_minimal() + theme(panel.grid = element_blank(), axis.text = element_blank(), axis.title = element_blank())
worldgrid + geom_rect(color = "#ffffff") + mytheme

なんとなく気づきますが、南北逆です。。。

南北を正しくして、タイルに国名を入れます。

worldgrid + geom_rect(color = "#ffffff") + mytheme +
  geom_text(aes(x = x, y = y, label = alpha.3), color = "#ffffff", alpha = 0.5, nudge_x = 0.5, nudge_y = -0.5, size = 2.5) + 
  scale_y_reverse()

最後に、地域ごとにタイルを色分けして、色の微調整等を行い、完成!

colors <- c("#c5221e","#4274e0","#f8ba03","#34a853","#950461","#72910a")
worldgrid <- ggplot(worldtilegrid, aes(xmin = x, ymin = y, xmax = x + 1, ymax = y + 1, fill = region)) 
worldgrid + geom_rect(color = "#888888") + mytheme +
  geom_text(aes(x = x, y = y, label = alpha.3), color = "#ffffff", alpha = 0.8, nudge_x = 0.5, nudge_y = -0.5, size = 2.5) + 
  scale_y_reverse() + 
  scale_fill_manual(values = colors) +
  theme(legend.position = "right") + 
  coord_equal()

こういう世界地図も面白いですね。

Add a Comment

メールアドレスが公開されることはありません。