Rで解析:OpenStreetMapからデータを取得してggplotで加工しよう「cartographr」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

指定した緯度、経度を基にOpenStreetMapからデータを取得してプロットするパッケージの紹介です。本パッケージに収録されている「plot_map」コマンドは「ggplot2」パッケージのコマンドと組み合わせることができます。地図データにプロット、シンボルやテーブルを追記するのに大変便利です。

パッケージのバージョンは0.2.2。windows 11のR version 4.4.1で確認しています。

スポンサーリンク

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

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

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

実行コマンド

詳細はコメントやコマンドヘルプを確認してください。

# パッケージの読み込み
library("cartographr")

# 出力用紙サイズを設定する:set_output_sizeコマンド
# サイズを指定:sizeオプション;"A0","A1","A2","A3","A4","A5","A6",
# "small_poster","medium_poster","large_poster",c(280,280)などと指定
set_output_size(c(280,280)) 


# OpenStreetMapからデータを取得:get_osmdataコマンド
# 中心の緯度を指定:latオプション
# 中心の経度を指定:lonオプション
# 取得領域幅の指定:x_distanceオプション;距離はメートル
# 取得領域高さの指定:y_distanceオプション;省略で幅と用紙サイズの縦横比に基づく
# 縦横比の指定:aspect_ratioオプション
# 処理メッセージの表示/非表示:quietオプション;TRUE/FALSE
# 取得したデータを保持する:keepオプション;TRUE/FALSE
SapporoMap <- get_osmdata(lat = 43.06, lon = 141.35, x_distance = 1000,
                          aspect_ratio = 1, quiet = FALSE, keep = FALSE)


# 取得データをプロット:plot_mapコマンド
# データを指定:osmオプション
# パレットを適応:paletteオプション
# "alphabet","arctic","autumn","autumn-muted","bw","desert","evening",
# "gray","iberia","imhof","lines","metropolitan","midnight","minimal",
# "swiss", "tropical"が設定可能
plot_map(SapporoMap, palette = "gray")

### 全パレットをプロット #####
# 注意_処理に時間がかかります
# tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
# gridExtraパッケージがなければインストール
if(!require("gridExtra", quietly = TRUE)){
  install.packages("gridExtra");require("gridExtra")
}

# 各パレットをlistに格納
ALL_PLot <- tibble(palettes= c("alphabet", "arctic","autumn", "bw",
                               "evening", "gray", "iberia", "imhof","lines","midnight",
                               "minimal","metropolitan","serene","swiss","tropical"),
                   SapporoMap = list(SapporoMap)) %>%
  rowwise() %>%
  mutate(plot = list(plot_map(SapporoMap, palettes) +
                       labs(title = palettes, caption = NULL) +
                       theme(axis.title = element_text(size = 0.5),
                             plot.caption = NULL)))

# プロット領域を設定
all <- c(ALL_PLot$plot, list(ncol = 4, nrow = 4))

# プロット
do.call(gridExtra::grid.arrange, all)
########


### 例えばこんな使い方 #####
## シンボル,テキストデータを用意
Point_Data <- tibble(y = c(43.068, 43.06, 43.064),
                     x = c(141.35, 141.35, 141.342),
                     point = c("A", "B", "C"),
                     text = c("札幌駅", "大通公園", "北海道庁"))
##

## Point_Dataの表を用意
# gridExtraパッケージがなければインストール
if(!require("gridExtra", quietly = TRUE)){
  install.packages("gridExtra");require("gridExtra")
}
# 表の体裁を設定gridExtra::ttheme_defaultコマンド
Table_T <- ttheme_default(core = list(bg_params = list(fill = c("red", "#505457",
                                                                "#4b61ba", "#a87963"),
                                                       col = NA, alpha = 0.8),
                                      fg_params = list(fontface = 1, fontsize = 10)),
                          colhead = list(bg_params = list(fill = "#92C2FF"),
                                         fg_params = list(fontface = 3,
                                                          fontsize = 9)))
# 表の作成:gridExtra::tableGrobコマンド
TestTabele <- tableGrob(Point_Data,
                        rows = NULL,
                        theme = Table_T)

# 表Titleを追加
##grid::textGrobコマンドを使用する##
Title <- grid::textGrob("札幌情報", gp = grid::gpar(fontsize = 10))

# 表にTitle行を追加
## gtable::gtable_add_rowsコマンドを使用する ##
TestTabele <- gtable::gtable_add_rows(TestTabele,
                                      heights = grid::grobHeight(Title) + unit(0.5,"line"),
                                      pos = 0)
# 表にTitleを追加
## gtable::gtable_add_grobコマンドを使用する ##
TestTabele <- gtable::gtable_add_grob(x = TestTabele, grobs = Title,
                                      t = 1, l = 1, r = ncol(TestTabele))


# プロット
plot_map(SapporoMap, palette = "gray") +
  geom_point(data = Point_Data, 
             mapping = aes(x = x, y = y, shape = point),
             color = "red", size = 4) +
  geom_text(data = Point_Data, 
            mapping = aes(x = x, y = y, label = text),
            color = "blue", size = 4, vjust = 2) +
  annotate(geom = "rect", col = "red", fill = NA,
           xmin = 141.35, xmax = 141.355,
           ymin = 43.06, ymax = 43.065) +
  annotation_custom(grob = TestTabele,
                    xmin = 141.345, xmax = 141.344,
                    ymin = 43.054, ymax = 43.053)

実行例

・全パレットをプロット

・例えばこんな使い方


少しでも、あなたの解析が楽になりますように!!

タイトルとURLをコピーしました