R IN ACTION SELF-TUTORIAL-54 用R进行地理运算-绘制地图 2020-12-27

image.png

用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() 
image.png
  • Add border layer to nz shape
tm_shape(nz) +
    tm_borders() 
image.png
  • Add fill and border layers to nz shape
tm_shape(nz) +
    tm_fill() +
    tm_borders() 
image.png
  • 可以使用tm_shape(new_obj)添加新形状。在这种情况下,new_obj表示要在先前图层之上绘制的新空间对象。当以此方式添加新形状时,所有后续美学功能均会引用该形状,直到添加另一个新形状为止。此语法允许创建具有多个形状和图层的地图,如下一个代码块中所示,该代码块使用函数tm_raster()绘制栅格图层(设置了alpha以使该图层半透明):

map_nz1 = map_nz +
    tm_shape(nz_elev) + tm_raster(alpha = 0.7)
map_nz1 
image.png
  • 在先前创建的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 
image.png
  • 可以添加到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 
image.png
  • tmap的一项有用且鲜为人知的功能是,可以使用tmap_arrange()将多个地图对象排列在一个“元映射”中。这在下面的代码块中得到了证明,下面的代码块将map_nz1绘制到map_nz3 。

tmap_arrange(map_nz1, map_nz2, map_nz3)
image.png

分面地图:

分面地图末尾地图也称为“小倍数”,由许多并排布置的地图组成,有时垂直堆叠(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)
image.png
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)
image.png
  • 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)
得到:
image.png

你可能感兴趣的:(R IN ACTION SELF-TUTORIAL-54 用R进行地理运算-绘制地图 2020-12-27)