公众号后台回复“图书“,了解更多号主新书内容

作者:宁海涛

来源:DataCharm

在上一篇介绍完Bokeh精美可视化作品之后,有小伙伴咨询我能不能稍系统的介绍下如何在地图上添加如柱形图等其他元素的绘制方法? 这就让我想到一个优秀的地图绘制可视化包-R-cartography,虽然之前也有简单介绍过,本期就具体分享下该包绘制的地图可视化作品(我们大部分绘图所使用的数据都是基于该包自带)。主要内容涉及以下两个部分:

  • cartography 特征

  • cartography 图层介绍

  • cartography 实例绘制

cartography 特征

1. Symbology

地图图层绘制函数,也是cartography最重要的绘图函数之一。每个功能着重于一个单一的制图表达(例如,比例符号或合计表示),并将其显示在地理参考图上。该解决方案允许将每个表示视为一个图层,并将多个表示覆盖在同一地图上。每个函数都有两个主要参数:

  • x:空间对象(最好是sf对象。

  • var:要映射的变量的名称。

如果变量包含在SpatialDataFrame中,则通过spdf参数处理sp对象;如果变量位于需要连接到SpatialDataFrame的单独data.frame中,则通过spdf,spdfid,df,dfid处理sp对象。

2. Transformations

一组功能专用于空间对象的创建或转换(例如边界提取,网格或链接创建)。提供这些功能是为了简化一些通常需要地理处理的高级地图的创建。

3. Map Layout

除了制图功能外,还有一些其他功能专用于布局设计(例如,可自定义的比例尺,向北箭头,标题,来源或作者信息…)。

4. Color Palettes

包装内随附16种原始调色板。可以定制和组合这些调色板。

5. Legends

图例默认沿制图图层显示,但Legend*()函数可提供更多参数。

6. Classification

getBreaks()可以访问用于数据装箱的大多数分类方法(本期推文主要介绍地图绘制相关内容,这部分不做介绍)。

cartography 图层功能介绍

cartography包提供了提供了许多优秀且功能强大的绘制函数用于绘制各类地图可视化作品,下面就一一介绍:

  • Choropleth Layer

library(sf)
library(cartography)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
mtq$POPDENS <- 1e6 * mtq$POP / st_area(x = mtq)
# Default
choroLayer(x = mtq, var = "POPDENS")

choroLayer default
# With parameters
choroLayer(x = mtq, var = "POPDENS",method = "quantile", nclass = 5,col = carto.pal(pal1 = "sand.pal", n1 = 5),border = "grey40",legend.pos = "topright", legend.values.rnd = 0,legend.title.txt = "Population Density\n(people per km2)")# Layout
layoutLayer(title = "Population Distribution in Martinique, 2015")

choroLayer With parameters
  • Discontinuities Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
# Get borders
mtq.borders <- getBorders(x = mtq)
# Median Income
choroLayer(x = mtq, var = "MED", border = "grey", lwd = 0.5,method = 'equal', nclass = 6, legend.pos = "topleft",legend.title.txt = "Median Income\n(in euros)" )
# Discontinuities
discLayer(x = mtq.borders, df = mtq,var = "MED", col="red4", nclass=3,method="equal", threshold = 0.4, sizemin = 0.5,sizemax = 10, type = "abs",legend.values.rnd = 0,legend.title.txt = "Discontinuities\n(absolute difference)",legend.pos = "bottomleft", add=TRUE)

Discontinuities
  • Plot a Ghost Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
target <- mtq[30,]
ghostLayer(target, bg = "lightblue")
plot(st_geometry(mtq), add = TRUE, col = "gold2")
plot(st_geometry(target), add = TRUE, col = "red")
# overly complicated label placement trick:
labelLayer(x = suppressWarnings(st_interp(mtq, st_buffer(target, 2000))),txt = "LIBGEO", halo = TRUE, cex = .9, r = .14, font = 2,bg = "grey20", col= "white")

Ghost Layer
  • Graduated Links Layer

    该类型地图较为常用,大家可以多注意下~~

library(sf)
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")
gradLinkLayer(x = mob.sf, df = mob,legend.pos = "topright",var = "fij",breaks = c(109,500,1000,2000,4679),lwd = c(1,2,4,10),col = "#92000090", add = TRUE)

Links Layer
  • Graduated and Colored Links Layer

    可以看作上个图层的优化

library(sf)
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) and
# Le Lamentin (97213)
mob.sf <- getLinkLayer(x = mtq, df = mob[mob$j %in% c(97209, 97213),],dfid = c("i", "j"))
# Plot the links - Work mobility
plot(st_geometry(mtq), col = "grey60",border = "grey20")
gradLinkTypoLayer(x = mob.sf, df = mob,var = "fij",breaks = c(109,500,1000,2000,4679),lwd = c(1,2,4,10),var2='j', add = TRUE)

Colored Links Layer
  • Hatched Layer

    该图层绘制函数有多种类型,这里只介绍一种。

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package = "cartography"))
plot(st_geometry(mtq), border = NA, col="grey80")
hatchedLayer(mtq, "text", txt = "Y", add=TRUE)
title("text")

Hatched Layer text
  • Label Layer

library(sf)
opar <- par(mar = c(0,0,0,0))
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
plot(st_geometry(mtq), col = "darkseagreen3", border = "darkseagreen4",bg = "#A6CAE0")
labelLayer(x = mtq, txt = "LIBGEO", col= "black", cex = 0.7, font = 4,halo = TRUE, bg = "white", r = 0.1,overlap = FALSE, show.lines = FALSE)

Label Layer
  • Proportional and Choropleth Symbols Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
plot(st_geometry(mtq), col = "grey60",border = "white",lwd=0.4, bg = "lightsteelblue1")
propSymbolsChoroLayer(x = mtq, var = "POP", var2 = "MED",col = carto.pal(pal1 = "blue.pal", n1 = 3,pal2 = "red.pal", n2 = 3),inches = 0.2, method = "q6",border = "grey50", lwd = 1,legend.var.pos = "topright",legend.var2.pos = "left",legend.var2.values.rnd = -2,legend.var2.title.txt = "Median Income\n(in euros)",legend.var.title.txt = "Total Population",legend.var.style = "e")
# First layout
layoutLayer(title="Population and Wealth in Martinique, 2015")

  • Proportional Symbols Typo Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
plot(st_geometry(mtq), col = "lightblue4",border = "lightblue3",bg = "lightblue1")
# Population plot on proportional symbols
propSymbolsTypoLayer(x = mtq, var = "POP", var2 = "STATUS",symbols = "circle",col = c("aquamarine4", "yellow3","wheat"),legend.var2.values.order = c("Prefecture","Sub-prefecture","Simple municipality"),legend.var.pos = "right", border = "grey",legend.var.title.txt = "Total\nPopulation")
layoutLayer(title = "Population Distribution in Martinique, 2015")

Proportional Symbols Typo Layer
  • Double Proportional Triangle Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
mtq$OCC <- mtq$ACT-mtq$CHOM
plot(st_geometry(mtq), col = "lightblue4",border = "lightblue3",bg = "lightblue1")
propTrianglesLayer(x = mtq, var1 = "OCC", var2 = "CHOM",col1="green4",col2="red4",k = 0.1)
layoutLayer(title = "Active Population in Martinique, 2015")

Double Proportional Triangle Layer
  • Smooth Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
smoothLayer(x = mtq, var = 'POP',span = 4000, beta = 2,mask = mtq, border = NA,col = carto.pal(pal1 = 'wine.pal', n1 = 8),legend.title.txt = "Population\nPotential",legend.pos = "topright", legend.values.rnd = 0)
propSymbolsLayer(x = mtq, var = "POP", legend.pos = c(690000, 1599950),legend.title.txt = "Population 2015",col = NA, border = "#ffffff50")
layoutLayer(title = "Actual and Potential Popultation in Martinique")

Smooth Layer
  • Typology Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
typoLayer(x = mtq, var="STATUS",col = c("aquamarine4", "yellow3","wheat"),legend.values.order = c("Prefecture","Sub-prefecture","Simple municipality"),legend.pos = "topright",legend.title.txt = "Status")
layoutLayer(title = "Municipality Status")

Typology Layer
  • Waffle Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package = "cartography"),quiet = TRUE)
# number of employed persons
mtq$EMP <- mtq$ACT - mtq$CHOMplot(st_geometry(mtq),col = "#f2efe9",border = "#b38e43",lwd = 0.5)
waffleLayer(x = mtq,var = c("EMP", "CHOM"),cellvalue = 100,cellsize = 400,cellrnd = "ceiling",celltxt = "1 cell represents 100 persons",labels = c("Employed", "Unemployed"),ncols = 6,col = c("tomato1", "lightblue"),border = "#f2efe9",legend.pos = "topright",legend.title.cex = 1,legend.title.txt = "Active Population",legend.values.cex = 0.8,add = TRUE
)layoutLayer(title = "Structure of the Active Population",col = "tomato4",tabtitle = TRUE,scale = FALSE,sources =  paste0("cartography ", packageVersion("cartography")),author = "Sources: Insee and IGN, 2018",
)

Waffle Layer
  • Wordcloud Layer

library(sf)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package = "cartography"))
par(mar=c(0,0,0,0))
plot(st_geometry(mtq),col = "white",bg = "grey95",border = NA)
wordcloudLayer(x = mtq,txt = "LIBGEO",freq = "POP",add = TRUE,nclass = 5
)
legendChoro(title.txt = "Population",breaks = getBreaks(mtq$POP, nclass = 5, method = "quantile"),col = carto.pal("blue.pal", 5),nodata = FALSE
)

Wordcloud Layer

除此之外,cartography包还提供用于绘制定制化图例的函数,这部分大家可自行探索哈~~

cartography 实例绘制

上面的绘图都来自于cartography官网,接下来,我们使用具体例子进行绘制,使用的数据还是关于美国的。代码如下:

library(sf)
library(cartography)
library(socviz)
library(albersusa)
library(tidyverse)
library(hrbrthemes)us_sf <- albersusa::usa_sf("laea")
png("usa_03.png",units = "in",width = 8,height = 6,res = 600)
# 设置画布边间
par(mar = c(0,0,1.2,0))
plot(st_geometry(us_sf), col = "grey60",border = "white",lwd=0.4, bg = "lightsteelblue1")
propSymbolsChoroLayer(x = us_sf, var = "pop_2014", var2 = "census_area",col = carto.pal(pal1 = "blue.pal", n1 = 3,pal2 = "red.pal", n2 = 3),inches = 0.2, method = "q6",border = "grey50", lwd = 1,legend.var.pos = "topright",legend.var2.pos = "bottomleft",legend.var2.values.rnd = -2,legend.var2.title.txt = "Census Area)",legend.var.title.txt = "Total Population in 2014",legend.var.style = "e")
# First layout
layoutLayer(title="Population and Census Area in USA, 2014",author = "Visualization by DataCharm")
# north arrow
north(pos = "topleft")
dev.off()

可视化结果如下:

Example Of USA

总结

本期推文我们系统介绍了cartography中常用的地图图层绘制,几乎包括了常见的地图类型,希望小伙伴们可以多多安利这个包~~

◆ ◆ ◆  ◆ ◆麟哥新书已经在当当上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前当当正在举行活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗

常见的地图绘制方法,这个包全包了~~相关推荐

  1. MATLAB常见非线性可视化绘制方法-相图与相空间(二维线性相图与非线性相空间)

    MATLAB常见非线性可视化绘制方法-相图与相空间(二维线性相图与非线性相空间) 0 引言 1 简单二阶微分方程 1.1 最简单的线性系统 1.2 简单的非线性系统 1.3 简单的时变系统 2 线性系 ...

  2. R语言-地图绘制的思路

    R中的画地图的思路有三种,一种是利用包里GIS方面的数据,在R中直接画出来,第二种是从其他地方拿到数据,在R中通过某些包解析后再展现成,第三种就是直接把别人的图拿过来,自己再添加或去掉自己需要或不需要 ...

  3. 计算机图形学(1)地图绘制

    目录 3.6 编程实例 - 地图绘制 3.6.1 地图绘制方法 3.6.2 基于OpenGL的地图绘制 3.6.3 代码 3.6 编程实例 - 地图绘制 显示漂亮的地图是地理信息系统软件的基本功能.事 ...

  4. html style 边框家村,朋友买的50平米一居室,全包一共才花5万,这其他风格太美了!-彩香一村五区装修...

    装修是让我们每个人都头疼的问题,可是又不得不去面对.装修的时候很多业主选择全包这种方式,其实是非常合理的,一起来看看50平米的一居室仅仅花了5万元是如何做到的,错过这些装修注意事项和技巧可不要后悔哦. ...

  5. iheatmapr包:可交互的热图绘制方法

    iheatmapr包 在R中有许多用于绘制热图的包,今天介绍一个比较有意思的用于绘制热图的包,iheatmapr 包,这个包是用来绘制复杂的.且具有交互作用的热图. 用iheatmapr包绘制得到的热 ...

  6. 使用 Python 地图绘制工具 -- folium 全攻略

    咱们用folium进行过多次地图绘制,有粉丝反馈在进行地图绘制的时候坐标点可能是百度地图经纬度.高德地图经纬度或者腾讯地图经纬度等情况,然后发现用默认的地图底图绘制的时候存在明显的偏移 另外,还有小伙 ...

  7. LDAP图怎么画?常见的LDAP图的绘制方法

    LDAP是轻型目录访问协议的英文缩写,主要是一套抽象.开放的通讯标准,能够轻松实现静态数据的快速查找,是一种便捷.高效的查询方式. LDAP图常见用途 LDAP图广泛应用于计算机领域,在系统.网络.应 ...

  8. Echarts地图 绘制自定义区域 - geojson.io使用方法

    Echarts地图 绘制自定义区域 & 解决区域点击无效 1. 绘制地图自定义区域 需求:绘制带高新区的河源市地图,目前百度地图json还没有此新区.需手动绘制. STEP1:获取市区json ...

  9. 3 移动机器人路径规划(1- 栅格地图绘制)

    1 栅格地图绘制 1.1 数据地图 1.1.1地图类型 1.1.2 栅格地图表示方式 1.2 位置的表示方法的区分 1.2.1 在栅格地图上绘制xy点发生的情况 1.2.2 三种表述位置方法的关系 1 ...

最新文章

  1. 揭秘码云:全球第二大代码托管平台的核心架构
  2. R 变量名开头不能为数字
  3. 架构师之路 — 分布式系统 — 分布式事务难题
  4. 【原创】源智工作流聚合步骤模型
  5. c语言音像图书管理系统设计,c语言--图书管理系统
  6. 【Java从入门到天黑|04】JavaSE入门之数组
  7. html ajax 双引号的问题
  8. 动态为GridView控件创建列
  9. JS让本地图片预览不再难-jquery插件
  10. Advanced Object Creation(JS,翻译MSDN文章)
  11. 功夫小子实践开发-Menu家族学习及开始菜单场景的实现
  12. Linux中的Ext2、ext3、ext4文件系统如何对磁盘中的文件进行存储和管理
  13. 计算机无法卸载软件,电脑安装的软件无法卸载怎么办?
  14. Zotero+坚果云的文献二三事
  15. allegro中怎样制作和添加logo
  16. JS 获取第一个和最后一个,子节点、子元素
  17. Opencv各版本汇总下载
  18. node linux cache补释放,linux下释放cache内存
  19. Android基础知识 — 1.3-ARM和Thumb指令详解1
  20. Springboot+vue整合

热门文章

  1. 从一个例子理解多态(附代码解释)
  2. 远程控制软件到底哪个好用?
  3. PTA 7-17 直角坐标->极坐标
  4. lol盒子皮肤工具 v1.33 免费版
  5. 【2021-11-29】JS逆向之某某海关企业进出口信用信息公示平台(下)
  6. MYSQL删除上亿条的大量数据的具体实现
  7. python代码示例500行源代码-500行代码使用python写个微信小游戏飞机大战游戏
  8. 简约素雅公司企业简介PPT模板
  9. 0.5米以内的精度,青岛迎来全国首个5G大件物流园区
  10. 使用Dell EMC SupportAssist Enterprise 来检查DELL服务器硬件故障