LoginSignup
3
3

More than 5 years have passed since last update.

mapmate で地理的ビジュアライズ(R)

Posted at

Rで地図を描画するのは容易ですが、アニメーションを作るには、少々コツが必要です。以前は手動でやっていたのですが、mapmateという便利なライブラリがあったので使ってみました。

mapmate の概要

Rのggplot2を利用して地図を作ってそれをアニメーションにするのはよくやることですが、結構コツが必要です。具体的には、地図を表示する際のサイズの設定や解像度、中間ファイルの出力方法など、標準的ではない使い方をしながら、プロダクションを進めないといけません。mapmateではいわゆる現像にあたる部分をほぼ自動化して、かつ、おしゃれな可視化をインスタントにすることが可能です。

Matthew Leonawiczさんという方が作られているようで、まだメンテはされているようです。University of Alaska Fairbanks で統計関係の仕事をしているようです。

インストール

以下のようにすればOKです。CRANには入っていないようです。
install.packages("devtools")
devtools::install_github("leonawicz/rvtable")

使い方(静止画)

lat,lonがあるdata.frameについて、frameIDというカラムを追加すれば、即座に出力可能です。
サンプルではmaptilesというラスタイメージを表示しています。orthoをTRUEにすると地球儀が表示されます。

library(mapmate)
library(dplyr)
data(annualtemps)

library(RColorBrewer)
pal <- rev(brewer.pal(11, "RdYlBu"))
temps <- mutate(annualtemps, frameID = Year - min(Year) + 1)
frame1 <- filter(temps, frameID == 1)  # subset to first frame
id <- "frameID"

save_map(frame1, z.name = "z", id = id, ortho = FALSE, col = pal, type = "maptiles", 
    save.plot = FALSE, return.plot = TRUE)
save_map(frame1, z.name = "z", id = id, col = pal, type = "maptiles", save.plot = FALSE, 
    return.plot = TRUE)

image.png
image.png

使い方(動画)

静止画なら別にggplotなどを使えばよいので、上記のラッパーを使う意味はあまりありません。動画を作ってみましょう。
こちらコードサンプルにあるように、animate関数を使って、生成される画像列を結合すればよいのですが、以下のように画像シーケンスを作るための関数が用意されています。

gglist <- save_seq(paths_flat, id = "id", n.frames = n, ortho = FALSE, type = "network", 
    ylim = ylm, png.args = png.args, save.plot = FALSE, return.plot = TRUE)

アニメーション化は以下のようにanimationパッケージで行います。

library(animation)
ani.options(convert = "C:/Program Files/ImageMagick-7.0.6-Q16/convert.exe")
saveGIF(for (i in seq_along(gglist)) print(gglist[[i]]), "network2D.gif", interval = 1/20, ani.width = 960, ani.height = 480)

これで非常に簡単に、以下のようなアニメーションが可能になります。

image.png

ImageMagickを使っているので、gifアニメーション以外も可能なようですから、活用範囲が広がりそうです。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3