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

在上一篇介绍完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_intersection(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中常用的地图图层绘制,几乎包括了常见的地图类型,希望小伙伴们可以多多安利这个包~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/822773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python QP 求解器

系列文章目录 前言 该 Python 库提供一站式 solve_qp 函数&#xff0c;用于求解凸二次规划&#xff1a; 向量不等式逐个坐标应用。函数返回后端 QP 求解器找到的初等解 &#xff0c;如果求解失败/问题不可行&#xff0c;则返回 None。所有求解器都要求问题是凸的&#xff0c;这…

CentOS 系统上使用 yum 安装 Nginx 及其模块

要在 CentOS 系统上使用 yum 安装 Nginx 及其 NJS (Nginx JavaScript Module)&#xff0c;首先需要确保你的系统已经包含了 Nginx 的官方仓库&#xff0c;因为 Nginx 的某些模块可能不在默认的软件仓库中。 以下是安装 Nginx 和 Nginx Module NJS 的基本步骤&#xff1a; 添加…

探讨选择成为一名程序员的原因,是出于兴趣还是职业发展。

选择成为一名程序员的原因可以是出于兴趣和职业发展两方面的考虑。以下是两个方面的探讨&#xff1a; 兴趣&#xff1a;许多人选择成为程序员是因为对计算机科学和编程的兴趣。他们喜欢解决问题、构建应用程序和创造新的数字体验。对于这些人来说&#xff0c;编程是一种有趣、令…

隐式/动态游标的创建与使用

目录 将 emp 数据表中部门 10 的员工工资增加 100 元&#xff0c;然后使用隐式游标的 %ROWCOUNT 属性输出涉及的员工数量 动态游标的定义 声明游标变量 打开游标变量 检索游标变量 关闭游标变量 定义动态游标&#xff0c;输出 emp 中部门 10 的所有员工的工号和姓名 Orac…

光圈如何影响图像质量

光圈是摄影中一个重要的参数&#xff0c;它决定了镜头的光线通过量&#xff0c;直接影响图像的曝光和深度。以下是光圈如何影响图像质量的几个方面&#xff1a; 曝光控制&#xff1a;光圈的大小决定了相机接收到的光线的数量。较大的光圈&#xff08;小光圈值&#xff09;允许…

Ubuntu安装Java17

Ubuntu安装Java17 文章目录 Ubuntu安装Java171. 升级Ubuntu软件资源库2. 安装OpenJDK3. 检查是否安装成功4. 检查OpenJDK被安装在什么地方5. 设置全局环境变量 1. 升级Ubuntu软件资源库 $ sudo apt update && sudo apt upgrade -y2. 安装OpenJDK $ sudo apt-get inst…

攻防演练,作为红方,安装Amass进行子域名扫描

要在Ubuntu系统上安装并使用Amass进行子域名扫描&#xff0c;可以按照以下步骤操作。这个过程涵盖了从安装到实际使用的全程。 1. 安装Amass 有多种方法可以在Ubuntu上安装Amass。我将介绍两种常见的方法&#xff1a;使用Snap包管理器和从源代码安装。 使用Snap安装&#xf…

【Vue3】getters---Vue3中的计算属性工具

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

多模态之ALBEF—先对齐后融合,利用动量蒸馏学习视觉语言模型表征,学习细节理解与论文详细阅读:Align before Fuse

Align before Fuse: Vision and Language Representation Learning with Momentum Distillation &#xff08;ALBEF&#xff09;在融合之前对齐&#xff1a;利用动量蒸馏进行视觉与语言表示学习 Paper: arxiv.org/pdf/2107.07651.pdf Github: https://github.com/salesforce/…

napi系列学习基础篇——如何通过DevEco Studio开发一个NAPI工程

简介 NAPI&#xff08;Native API&#xff09;是OpenHarmony系统中的一套原生模块扩展开发框架&#xff0c;它基于Node.js N-API规范开发&#xff0c;为开发者提供了JavaScript与C/C模块之间相互调用的交互能力。如下图所示&#xff1a; 这套机制对于鸿蒙系统开发的价值有两方…

权威认证!亚信安全9款产品入选CCIA首版《网络安全专用产品指南》

权威认证 近日&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;正式发布《网络安全专用产品指南》&#xff08;第一版&#xff09;&#xff08;以下简称《指南》&#xff09;&#xff0c;亚信安全凭借突出技术实力、创新优势以及业内深厚积累&#xff0c;旗下9款…

为什么VPS服务器是一个好的选择?

数字世界不断发展。无论是小型企业、中型企业还是大型企业&#xff0c;建立在线形象对于企业来说都变得非常重要。那么&#xff0c;在本文中&#xff0c;我们将主要讨论网站的托管服务器。有许多托管解决方案可供选择&#xff0c;而虚拟专用服务器(VPS)托管是业内最佳选择之一。…

学会 Python 后可以做什么副业?

近年来&#xff0c;Python凭借其简洁易入门的特点受到越来越多人群的青睐。 当然这不仅仅是针对程序员来说&#xff0c;对于一些学生、职场人士也是如此。 Python为什么会大受欢迎呢&#xff1f;因为Python还被大家称为“胶水语言&#xff0c;它适用于网站、桌面应用开发、[自…

大模型微调的几种常见方法

在文章深入理解大语言模型微调技术中&#xff0c;我们详细了解大语言模型微调的概念和训练过程&#xff0c;本篇给大家介绍大模型微调常见的7种训练方法。 1、Adapter Tuning 2019年谷歌的研究人员首次在论文《Parameter-Efficient Transfer Learning for NLP》提出针对 BERT 的…

Matlab求矩阵的逆,3种常用方法总结

几种求逆矩阵的方法总结&#xff0c;以Matlab语言为例 *0* 引言*1* 简单描述函数实现*2* 方法调用计算对比 0 引言 最近在使用函数库求解逆矩阵的时候发现同一个矩阵使用不同的语言、不同的求解方法会产生不同精度的结果&#xff0c;特别是阶数很高的方阵&#xff0c;一些库中的…

第14章 大数据与数据科学知识点梳理

第14章 大数据与数据科学知识点梳理&#xff08;附带页码&#xff09; ◼ 原则&#xff1a;组织应仔细管理与大数据源相关的元数据&#xff0c;以便对数据文件及其来源和价值进行准确的清单管理。P386 ◼ 大数据&#xff1a;数据量大&#xff08;Volume&#xff09;、数据更新…

未来计算机的发展趋势是什么?

未来计算机的发展趋势是多方面的,涵盖了硬件、软件、体系结构以及计算范式等多个层面。以下是一些预期的趋势: 1. 量子计算: 随着量子理论的不断成熟和技术的进步,量子计算机将可能解决传统计算机难以处理的问题,比如药物发现、材料科学、复杂系统模拟等领域。量子计算的…

专访《综合品酒师》培训破大世界基尼斯之最纪录,开启行业新篇章

在一个阳光明媚的午后&#xff0c;记者来到了位于城市繁华地段的云仓酒庄。走进云仓酒庄&#xff0c;浓郁的酒香扑鼻而来&#xff0c;配合着柔和的灯光和精致的装饰&#xff0c;记者仿佛置身于一个酒文化的殿堂。在这里&#xff0c;记者有幸采访到了云仓酒庄的负责人&#xff0…

JS如何配合input框实现模糊搜索

在JavaScript中&#xff0c;实现一个模糊搜索的搜索框功能&#xff0c;通常需要以下几个步骤&#xff1a; 创建一个HTML输入框和一个显示搜索结果的元素。监听输入框的input事件&#xff0c;当用户输入时触发搜索。在事件处理函数中&#xff0c;根据用户输入的关键词进行模糊搜…

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰

NH2-PEG-Silane 氨基聚乙二醇硅烷 生物材料表面修饰 【中文名称】氨基聚乙二醇硅烷 【英文名称】Silane-PEG-NH2 【结 构】 【品 牌】碳水科技&#xff08;Tanshtech&#xff09; 【纯 度】95%以上 【保 存】-20 【规 格】500mg,1g,5g,10g 【产品特性】 生…