cartography 主题地图

2019-10-03  本文已影响0人  冬之心

title: "thematic map"
author: "wintryheart"
date: "2019/8/16"
output:
html_document:
toc: true
number_sections: true
toc_depth: 1


## ----echo=FALSE----------------------------------------------------------
knitr::opts_chunk$set( warning = FALSE, message = FALSE, echo = TRUE)

knitr::knit_hooks$set(margin = function(before, options, envir){
  if (before){
    par(mar=c(0.1,0.1,1.3,0.1))
  } 
})

cartography专题地图包简介

主函数类别

Symbology系列

专题类型 函数
Choropleth面量图 choroLayer(x = mtq, var = "myvar", method = "quantile", nclass = 8)
Typology类型图 typoLayer(x = mtq, var = "myvar")
Proportional Symbols比例符号图 propSymbolsLayer(x = mtq, var = "myvar", inches = 0.1, symbols = "circle")
Colorized Proportional Symbols (relative data)
彩色的比例符号图(相关数据)
propSymbolsChoroLayer(x = mtq, var = "myvar", var2 = "myvar2")
Colorized Proportional Symbols (qualitative data)彩色的比例符号图(定性数据) propSymbolsTypoLayer(x = mtq, var = "myvar", var2 = "myvar2")
Double Proportional Symbols双比例符号图 propTrianglesLayer(x = mtq, var1 = "myvar", var2 = "myvar2")
OpenStreetMap Basemap (see rosm package)
OpenStreetMap基础图
tiles <- getTiles(x = mtq, type = "osm")
tilesLayer(tiles)
Isopleth (see SpatialPosition package)等值线图 smoothLayer(x = mtq, var = "myvar", typefct = "exponential", span = 500, beta = 2)
Discontinuities断裂图 discLayer(x = mtq.borders, df = mtq, var = "myvar", threshold = 0.5
Flowsi流向图 gradLinkLayer(x = mob.sf, df = mob, var = "fij",breaks = c(109,500,1000,2000,4679))
propLinkLayer(x = mtq_link, df = mtq_df,var = "fij")
Dot Density点密度图 dotDensityLayer(x = mtq, var = "myvar")
Labels标签 labelLayer(x = mtq, txt = "myvar", halo = TRUE, overlap = FALSE)
library(cartography)
library(sf)

# path to the geopackage file embedded in cartography
path_to_gpkg <- system.file("gpkg/mtq.gpkg", package="cartography")
# import to an sf object
mtq <- st_read(dsn = path_to_gpkg, quiet = TRUE)

# Choropleth
# plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
choroLayer(x = mtq, var = "POP", method = "quantile", nclass = 8)
1.png
# Typology
# plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
typoLayer(x = mtq, var = "LIBGEO")
2.png
# Proportional Symbols
plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
propSymbolsLayer(x = mtq, var = "POP", inches = 0.1, symbols = "circle")
plot(st_geometry(mtq), lwd = 0.5, border = "grey20", add = TRUE, lty = 3)
3.png
# Colorized Proportional Symbols (relative data) 两个连续变量
plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
propSymbolsChoroLayer(x = mtq, var = "POP", var2 = "MED")
plot(st_geometry(mtq), lwd = 0.5, border = "grey20", add = TRUE, lty = 3)
4.png
# Colorized Proportional Symbols (qualitative data) 一个连续一个分类变量
plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
propSymbolsTypoLayer(x = mtq, var = "POP", var2 = "STATUS")
plot(st_geometry(mtq), lwd = 0.5, border = "grey20", add = TRUE, lty = 3)
5.png
# Double Proportional Symbols
plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
propTrianglesLayer(x = mtq, var1 = "POP", var2 = "MED")
plot(st_geometry(mtq), lwd = 0.5, border = "grey20", add = TRUE, lty = 3)
6.png
# OpenStreetMap Basemap (see rosm package) 
tiles <- getTiles(x = mtq, type = "osm")
tilesLayer(tiles)
7.png
# Isopleth (see SpatialPosition package)
library(SpatialPosition)
smoothLayer(x = mtq, var = "POP", typefct = "exponential", span = 4000, beta = 2, mask = mtq)
8.png

typefct参数:空间交互作用函数(spatial interaction function),有两个选项"pareto" (means power law帕累托幂律分布) or "exponential". 如果是"pareto"分布,交互作用函数为: (1 + alpha * mDistance) ^ (-beta)。如果是 "exponential"分布, 交互作用函数为 : exp(- alpha * mDistance ^ beta) 。alpha参数由用户给出的span和beta参数计算出。

span参数: 空间相互作用函数的概率密度为0.5的距离
beta参数: 空间相互作用函数的阻尼因子

如果有var2,那么将计算var1(分子)和var2(分母)的比率。

对于中国地图,建议取span=200000,beta=2

# Discontinuities
# Get a SpatialLinesDataFrame of countries borders 获取边界线数据框
mtq.contig <- getBorders(mtq)
# plot municipalities  画区划图
plot(st_geometry(mtq))
# Plot the population with custom breaks  画面量图
choroLayer(x = mtq, var = "POP", legend.pos = "topright")
# Plot discontinuities画
discLayer(x = mtq.contig, df = mtq, var = "POP",  method = "geom",  nclass = 3, threshold = 0.4)
9.png
10.png
# Flows包含三种:
# gradLinkLayer():  Graduated Links Layer 绘制一个分级链接层。链接是根据离散的宽度类别绘制的。
# gradLinkTypoLayer():  Graduated and Colored Links Layer绘制一个彩色和渐变链接层。链接是根据离散类别的宽度绘制的。颜色依赖于离散变量的类别。
# propLinkLayer(): Proportional Links Layer绘制一个比例链接层。链接宽度与变量的值成正比。

mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
mob <- read.csv(system.file("csv/mob.csv", package="cartography"))
# Create a link layer - work mobilities to Fort-de-France (97209)
mob.sf <- getLinkLayer(x = mtq, df = mob[mob$j==97209,], dfid = c("i", "j"))
# Plot the links - Work mobility
plot(st_geometry(mtq), col = "grey60",border = "grey20")
propLinkLayer(x = mob.sf, df = mob, maxlwd = 10, legend.pos = "topright", var = "fij",
              col = "#92000090", add = TRUE)
11.png
# Dot Density
plot(st_geometry(mtq), col = NA, border = NA, bg = "#aadaff")
dotDensityLayer(x = mtq, var = "POP")
plot(st_geometry(mtq), lwd = 0.5, border = "grey20", add = TRUE, lty = 3)

# Label
labelLayer(x = mtq, txt = "POP",halo = TRUE, overlap = FALSE)

12.png

Transformations系列

类型 用法 说明
Polygons to Grid mtq_grid <- getGridLayer(x = mtq, cellsize = 3.6e+07,
type = "hexagonal", var = "myvar")
Grids layers can be used by
choroLayer() or propSymbolsLayer().
Points to Links mtq_link <- getLinkLayer(x = mtq, df = link) Links layers can be used by *LinkLayer().
Polygons to Borders mtq_border <- getBorders(x = mtq) Borders layers can be used by
discLayer() function
Polygons to Pencil Lines mtq_pen <- getPencilLayer(x = mtq)

Map Layout系列

名称 含义 函数
North Arrow 指北箭头 north(pos = "topright")
Scale Bar 比例尺 barscale(size = 5)
Full Layout 完整布局 layoutLayer(title = "Martinique", subtitle = TRUE, frame = TRUE, author = "Author",
sources = "Sources", north = TRUE, scale = 5)
Figure Dimensions 图的尺寸:基于空间对象的尺寸比例(dimension ratio)、
图边距(figure margins)和输出分辨率(output resolution)
获取图像外形尺寸(figure dimensions)。
f_dim <- getFigDim(x = sf_obj, width = 500,mar = c(0,0,0,0))
png("fig.png", width = 500, height = f_dim[2])
par(mar = c(0,0,0,0))
plot(sf_obj, col = "#729fcf")
dev.off()

Color Palettes系列

1 2 3 4
blue.pal orange.pal red.pal brown.pal
green.pal pink.pal purple.pal wine.pal
grey.pal sand.pal kaki.pal pastel.pal
turquoise.pal taupe.pal harmo.pal multi.pal

Legends系列

函数 含义
legendBarsSymbols Legend for Proportional Bars Maps
legendChoro Legend for Choropleth Maps
legendCirclesSymbols Legend for Proportional Circles Maps
legendGradLines Legend for Graduated Size Lines Maps
legendPropLines Legend for Proportional Lines Maps
legendPropTriangles Legend for Double Proportional Triangles Maps
legendSquaresSymbols Legend for Proportional Squares Maps
legendTypo Legend for Typology Maps

Classification系列

bks1 <- getBreaks(v = mtq$POP, nclass = 6, method = "quantile")  
bks2 <- getBreaks(v = mtq$POP, nclass = 6, method = "fisher-jenks")  
pal <- carto.pal("green.pal",3, "wine.pal", 3)  
hist(mtq$POP, breaks = bks1, col = pal)  
hist(mtq$POP, breaks = bks2, col = pal)  
13.png 14.png
setwd("d:/province")
chinamap <- st_read("province.shp")
#点密度图
plot(st_geometry(chinamap))
dotDensityLayer(x=chinamap, var="POPU",pch=20, col="red4", n=50)
#平滑数据图
smoothLayer(x = chinamap, var = 'POPU',
             span = 200000, beta = 2,
             mask = chinamap, border = NA,
             col = carto.pal(pal1 = 'wine.pal', n1 = 8),
             legend.title.txt = "Population\nPotential",
             legend.pos = "topright", legend.values.rnd = 0)
propSymbolsLayer(x = chinamap, var = "POPU",   col = NA, border = "#ffffff50")
15.png 16.png
library(ggplot2)
library(cartography)
library(tidyverse) 
 
older <- read.csv("c:/users/wintryheart/desktop/oldermarriage.csv")
chinamap <- read_sf("d:/province/province.shp")
chinamap2 <- left_join(chinamap, older, by=c("NAME"="province"))
chinamap2 <- select(chinamap2, "NAME","unmar","married","divorce","widow")

choroLayer(x=chinamap2,var="unmar", method = "fisher-jenks", nclass = 4, legend.pos = "right") 
layoutLayer(title="中国老年人未婚状况(2010)",sources = "数据来源:中国第六次人口普查", author = "制图:李亮")

choroLayer(x=chinamap2,var="married", method = "fisher-jenks", nclass = 4, legend.pos = "right") 
layoutLayer(title="中国老年人有配偶状况(2010)",sources = "数据来源:中国第六次人口普查", author = "制图:李亮")


choroLayer(x=chinamap2,var="divorce", method = "fisher-jenks",nclass=4, legend.pos = "right") 
layoutLayer(title="中国老年人离婚状况(2010)",sources = "数据来源:中国第六次人口普查", author = "制图:李亮")

choroLayer(x=chinamap2,var="widow", method = "fisher-jenks",nclass=4, legend.pos = "right") 
layoutLayer(title="中国老年人丧偶状况(2010)",sources = "数据来源:中国第六次人口普查", author = "制图:李亮")

17.png 18.png 19.png 20.png
上一篇 下一篇

猜你喜欢

热点阅读