指定した緯度、経度を基に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)
実行例
・全パレットをプロット
・例えばこんな使い方
少しでも、あなたの解析が楽になりますように!!