用R制作地图
https://geocompr.robinlovelace.net/adv-map.html#interactive-maps
用R进行地理运算
https://geocompr.robinlovelace.net/
1.本章要求我们已经使用以下软件包:
-
安装包
install.packages('sf')
install.packages('raster')
install.packages('dplyr')
install.packages('spData')
install.packages('spDataLarge',repos='https://nowosad.github.io/drat/', type='source')
-
每个包的用途:
Package | Title |
---|---|
cartography | Thematic Cartography |
ggplot2 | Create Elegant Data Visualisations Using the Grammar of Graphics |
googleway | Accesses Google Maps APIs to Retrieve Data and Plot Maps |
ggspatial | Spatial Data Framework for ggplot2 |
leaflet | Create Interactive Web Maps with Leaflet |
mapview | Interactive Viewing of Spatial Data in R |
plotly | Create Interactive Web Graphics via ‘plotly.js’ |
rasterVis | Visualization Methods for Raster Data |
tmap | Thematic Maps |
cartogram | Create Cartograms with R |
geogrid | Turn Geospatial Polygons into Regular or Hexagonal Grids |
geofacet | ‘ggplot2’ Faceting Utilities for Geographical Data |
globe | Plot 2D and 3D Views of the Earth, Including Major Coastline |
linemap | Line Maps |
-
加载包:
library(sf)
library(raster)
library(dplyr)
library(spData)
library(spDataLarge)
-
此外,它使用以下可视化程序包(如果要开发交互式地图应用程序,请安装闪亮的程序包):
install.packages('tmap') # for static and interactive maps
install.packages('leaflet') # for interactive maps
install.packages('ggplot2') # tidyverse data visualization package
-
加载:
library(tmap) # for static and interactive maps
library(leaflet) # for interactive maps
library(ggplot2) # tidyverse data visualization package
-
2.开始作图:
-
Add fill layer to nz shape
# Add fill layer to nz shape
tm_shape(nz) +
tm_fill()
-
Add border layer to nz shape
tm_shape(nz) +
tm_borders()
-
Add fill and border layers to nz shape
tm_shape(nz) +
tm_fill() +
tm_borders()
-
可以使用tm_shape(new_obj)添加新形状。在这种情况下,new_obj表示要在先前图层之上绘制的新空间对象。当以此方式添加新形状时,所有后续美学功能均会引用该形状,直到添加另一个新形状为止。此语法允许创建具有多个形状和图层的地图,如下一个代码块中所示,该代码块使用函数tm_raster()绘制栅格图层(设置了alpha以使该图层半透明):
map_nz1 = map_nz +
tm_shape(nz_elev) + tm_raster(alpha = 0.7)
map_nz1
-
在先前创建的map_nz对象的基础上,前面的代码创建了一个新的地图对象map_nz1,其中包含另一个形状(nz_elev),代表整个新西兰的平均海拔 。可以添加更多的形状和图层,如下面的代码块所示,该代码块创建代表新西兰领水的nz_water,并将结果线添加到现有的地图对象中。
nz_water = st_union(nz) %>% st_buffer(22200) %>%
st_cast(to = "LINESTRING")
map_nz2 = map_nz1 +
tm_shape(nz_water) + tm_lines()
map_nz2
-
可以添加到tmap对象的层或形状的数量没有限制。相同的形状甚至可以多次使用。图8.2中所示的最终地图是通过使用tm_dots()向先前创建的map_nz2对象添加代表最高点(存储在对象nz_height中)的图层而创建的(有关tmap的点绘图功能的详细信息,请参见?tm_dots和?tm_bubbles)。生成的地图具有四个图层 :
map_nz3 = map_nz2 +
tm_shape(nz_height) + tm_dots()
map_nz3
-
tmap的一项有用且鲜为人知的功能是,可以使用tmap_arrange()将多个地图对象排列在一个“元映射”中。这在下面的代码块中得到了证明,下面的代码块将map_nz1绘制到map_nz3 。
tmap_arrange(map_nz1, map_nz2, map_nz3)
分面地图:
分面地图末尾地图也称为“小倍数”,由许多并排布置的地图组成,有时垂直堆叠(Meulemans等,2017)。方面使可视化空间关系如何相对于另一个变量(例如时间)发生变化。例如,可以在多面地图中以多面地图表示住区中不断变化的人口,每个面板代表特定时间点的人口。时间维度可以通过另一种美学来表示,例如颜色。但是,这会造成地图混乱,因为它将涉及多个重叠点(城市不会随时间推移而移动!)。典型情况下,多面地图中的所有各个构面都包含相同的几何数据,重复多次,对于属性中的每一列一次数据 。但是,刻面也可以表示几何形状的变化,例如点图形随时间的演变。
通常,多面地图中的所有各个小面都包含重复多次的相同几何数据,对于属性数据中的每一列一次。但是,刻面也可以表示几何形状的变化,例如点图形随时间的演变。
urb_1970_2030 = urban_agglomerations %>%
filter(year %in% c(1970, 1990, 2010, 2030))
tm_shape(world) +
tm_polygons() +
tm_shape(urb_1970_2030) +
tm_symbols(col = "black", border.col = "white", size = "population_millions") +
tm_facets(by = "year", nrow = 2, free.coords = FALSE)
urb_1970_2030 = urban_agglomerations %>%
filter(year %in% c(1970, 1990, 2000, 2030))
tm_shape(world) +
tm_polygons() +
tm_shape(urb_1970_2030) +
tm_symbols(col = "red", border.col = "white", size = "population_millions") +
tm_facets(by = "year", nrow = 2, free.coords = FALSE)
-
Get a single figure:
urb_1970_2030 = urban_agglomerations %>%
filter(year %in% c(1970))
tm_shape(world) +
tm_polygons() +
tm_shape(urb_1970_2030) +
tm_symbols(col = "red", border.col = "red", size = "population_millions") +
tm_facets(by = "year", nrow = 1, free.coords = FALSE)