tmap: get started!

tmap パッケージを使用すると、テーママップを非常に柔軟に生成することができる。 プロット作成のための構文は ggplot2 と似ているが、地図用に調整されている。 この vignette は、数分でtmapを使い始めたい人のためのものである。 tmap の詳細な説明は、Journal of Statistical Software に掲載された article にある ( JSS)。 しかし、その記事はtmapのバージョン1.11-2について述べており、これは古いものである。 その後、いくつかの大きな変更が行われ、その内容については vignette("tmap-changes") に記述されている。

Rの地理的な機能に関するより詳しい情報は、オンライン版の書籍 Geocomputation with Rを勧める。この本の Making maps with R の章では、tmap や他のパッケージを使った地図作成について、より多くの文脈と豊富なコード例を提供している。その他の良い資料として、 vignette の sf packageがある。

こんにちは

手始めに世界地図を作成するのがよいだろう。 installing tmap の後、以下のような行で、以下に示すマップが作成されるはずである。

library(tmap)
data("World")

tm_shape(World) +
    tm_polygons("HPI")

オブジェクト Worldsf package のクラス sf の空間オブジェクトである。これは data.frame で、各行のジオメトリ(この場合はポリゴン)を含む特別な列である。
tmap にプロットするためには、まず tm_shape で指定する必要がある。 レイヤーは、+ 演算子で追加することができる。この場合、tm_polygons。 tmapには多くのレイヤ関数があり、ドキュメントでは tm_ のプレフィックスで簡単に見つけることができる。 ?'tmap-element' も参照。

インタラクティブ・マップ

各マップは静止画としてプロットできるほか、"plot""view" モードを使ってそれぞれインタラクティブに表示することができる。 モードの設定は関数 tmap_mode、モード間のトグルは「スイッチ」 ttm() (トグル・テーママップの略)で行うことができる。

tmap_mode("view")

tm_shape(World) +
    tm_polygons("HPI")

複数の図形やレイヤーを使用することができる。

形状は、空間オブジェクト(クラスが sf , sp , stars , または raster )である。 複数のシェイプ、およびシェイプごとの複数のレイヤーをプロットすることができる。

data(World, metro, rivers, land)

tmap_mode("plot")
## tmap mode set to plotting
tm_shape(land) +
    tm_raster("elevation", palette = terrain.colors(10)) +
tm_shape(World) +
    tm_borders("white", lwd = .5) +
    tm_text("iso_a3", size = "AREA") +
tm_shape(metro) +
    tm_symbols(col = "red", size = "pop2020", scale = .5) +
tm_legend(show = FALSE)
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()

ファセット

ファセットは、3つの方法で作成することができる。

  1. 1つの aes に複数の変数名を割り当てる(この例では、tm_polygons の第1引数)
tmap_mode("view")
tm_shape(World) +
    tm_polygons(c("HPI", "economy")) +
    tm_facets(sync = TRUE, ncol = 2)

  1. tm_facets の引数 by で空間データを分割する
tmap_mode("plot")
## tmap mode set to plotting

data(NLD_muni)

NLD_muni$perc_men <- NLD_muni$pop_men / NLD_muni$population * 100

tm_shape(NLD_muni) +
    tm_polygons("perc_men", palette = "RdYlBu") +
    tm_facets(by = "province")
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()

  1. tmap_arrange 機能を使用する
tmap_mode("plot")
## tmap mode set to plotting

data(NLD_muni)
tm1 <- tm_shape(NLD_muni) + tm_polygons("population", convert2density = TRUE)
tm2 <- tm_shape(NLD_muni) + tm_bubbles(size = "population")

tmap_arrange(tm1, tm2)
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## old-style crs object detected; please recreate object with a recent sf::st_crs()
## Legend labels were too wide. Therefore, legend.text.size has been set to 0.27. Increase legend.width (argument of tm_layout) to make the legend wider and therefore the labels larger.
## The legend is too narrow to place all symbol sizes.

ベースマップとオーバーレイタイルマップ

タイル状のベースマップは、レイヤ機能( tm_basemap )で追加できる。 半透明のオーバーレイマップ(アノテーションラベルなど)は、tm_tiles を使って追加することができる。

tmap_mode("view")
tm_basemap("Stamen.Watercolor") +
tm_shape(metro) + tm_bubbles(size = "pop2020", col = "red") +
tm_tiles("Stamen.TonerLabels")

sigma

preview of the available tilemapsを参照。
このリストはRでもアクセス可能である: leaflet::providers .

オプションとスタイル

関数 tm_layouttm_view は、それぞれ地図のレイアウトとインタラクティブな面を指定するために使用される。 これらの関数は、レイヤーの関数と同じように、例えば

tmap_mode("plot")
## tmap mode set to plotting

tm_shape(World) +
    tm_polygons("HPI") +
tm_layout(bg.color = "skyblue", inner.margins = c(0, .02, .02, .02))

これらのオプションは、他のいくつかのオプションと同様に tmap_options で設定することもできる。これは、R の基本関数 options と同じように動作する。 主な利点は、これらのオプションがグローバルに設定されるため、セッション期間中、各マップで指定する必要がないことである。

tmap_options(bg.color = "black", legend.text.color = "white")

tm_shape(World) +
    tm_polygons("HPI", legend.title = "Happy Planet Index")

スタイルとは、tmapのオプションのうち、ある特定の設定のことである。

tmap_style("classic")
## tmap style set to "classic"
## other available styles are: "white", "gray", "natural", "cobalt", "col_blind", "albatross", "beaver", "bw", "watercolor"

tm_shape(World) +
    tm_polygons("HPI", legend.title = "Happy Planet Index")

# see what options have been changed
tmap_options_diff()
## current tmap options (style "classic") that are different from default tmap options (style "white"):
## $sepia.intensity
## [1] 0.7
## 
## $frame.double.line
## [1] TRUE
## 
## $fontfamily
## [1] "serif"
## 
## $compass.type
## [1] "rose"
## 
## $basemaps
## [1] "Esri.WorldTopoMap"
## 
## $basemaps.alpha
## [1] 0.5

# reset the options to the default values
tmap_options_reset()
## tmap options successfully reset

新しいスタイルを作成することができる。?tmap_options を参照。

地図の書き出し

tm <- tm_shape(World) +
    tm_polygons("HPI", legend.title = "Happy Planet Index")

## save an image ("plot" mode)
tmap_save(tm, filename = "world_map.png")

## save as stand-alone HTML file ("view" mode)
tmap_save(tm, filename = "world_map.html")

shiny との統合

shiny で tmap を使用することが可能である。

# in UI part:
tmapOutput("my_tmap")

# in server part
output$my_tmap = renderTmap({
    tm_shape(World) + tm_polygons("HPI", legend.title = "Happy Planet Index")
})

動作例については、?renderTmap を参照。

クイックテーママップ

また、1回の関数呼び出しでマップを作成することも可能である。 この関数は、qtm

qtm(World, fill = "HPI", fill.pallete = "RdYlGn")

Tips ’n Tricks

以下を実行。

tmap_tip()