绘图技巧 | 双变量映射地图可视化绘制方法

本期推文我们绘制不常见的双变量主题地图,该类地图可以很好的在地图上用颜色展示两个变量的信息,相较于单一变量映射地图,此类地图表达的信息更加丰富和全面。本期推文主要涉及的内容如下:

  • 双变量映射地图(Bivariate Choropleth Map)简介

  • R-ggplot2+biscale 轻松绘制双变量映射地图

  • 更多详细的数据可视化教程,可阅读我们的课程店铺:

Bivariate Choropleth Map

在绘制地图时,我们常常使用单一变量进行映射处理,当然,这样展示的结果可以很好的表现我们研究的特征(如收入、房价等)的变化情况或者具体的情况,如下图:

单一变量映射地图

首先,我们先通过通过下图来简单解释下双变量映射的含义:

  1. 首先我们创建单一变量的3级顺序配色色系。色系从较浅的中性色开始,代表第一个变量的最小值。色系颜色逐渐变暗,并朝着您代表较高值的色相饱和。中间色应与底色具有相同的色相,但其饱和度应较低而亮度较高,如下:

  2. 根据第一步,我们再创建一个色系,色系颜色含义类似,如下:

  3. 我们将所选择的6种颜色经过旋转拉伸等操作,即可获得 如下效果:

    4.双变量配色色系的数值表示可以用以下这幅图表示:

    此外,我们还可以使用A,B或C标记水平方向的单元格,用1、2或3标记垂直方向的单元格:如下:

(注:以上双变量简介参考资料:Bivariate Choropleth Maps: A How-to Guide[1])

R-ggplot2+biscale 轻松绘制双变量映射地图

在简单介绍完之后,接下来,我们使用R语言的biscale、ggplot2以及cowplot包完成此类地图的绘制。R-biscale包是专门为了绘制双变量映射地图而产生的R绘图包,其官网为:https://slu-opengis.github.io/biscale/articles/biscale.html,目前支持2×2和3×3的二元映射,以下为官网提供的样例,更多例子及函数用法,大家可以参考官网:

「样例01」

「样例02」

two-by-two palettes

three-by-three palettes

接下来,我们使用具体的例子介绍使用biscale包绘制双变量映射地图教程。这里的数据地图数据和指标数据分别来自albersusa和socviz包,albersusa包提供了美国标准地图地图文件数据,socviz包则提供了许多常用的指标数据,这两个包也为绘制美国地图省去了寻找数据的时间(小编可是找了好久的数据,最后才找到这个宝藏包哦~~),话不多说,我们直接上代码,具体如下:

「数据处理」

library(albersusa)
country_sf <- albersusa::counties_sf(proj = "laea")
usa_map <- ggplot() + 
   geom_sf(data = country_sf,size=.125) +
   theme_ipsum(base_family = "Roboto Condensed")
usa_map

可视化预览效果如下:

具体的数据格式如下:

counties <- counties_sf()
head(counties)

而我们选择socviz包中的数据操作代码如下:

us_data <- socviz::county_data %>% select(id,fips,name,state, pop,hh_income,travel_time)
head(us_data)

接下来,我们将两种数据(地图数据+指标数据)根据fips编码进行合并,需要注意的是我们需要将地图文件中fips列转换成字符串类型,详细代码如下:

counties <- mutate(counties,fips=as.character(fips)) #mutate()生成新列
bio_data <- left_join(counties,us_data,by = c("fips"="id"))

最后,我们使用biscale::bi_class()方法将合并后的数据转换成可用于绘制双变量映射的数据集,代码如下:

process_data <- biscale::bi_class(bio_data,x = hh_income,y = travel_time,style = "quantile",dim = 3)
head(process_data)

注意:红框中的数据就是我们用于映射的数据集,接下来,我们进行可视化展示:

「可视化绘制」: 在此之前,我们需将绘制数据使用sf::st_transform()进行投影转换,使其更好的展示美国地图,代码如下:

process_data_2163 <- sf::st_transform(process_data,crs = 2163)

可视化绘制代码如下:

usa_bivar_2163_them <- ggplot() +
  geom_sf(data = process_data_2163, mapping = aes(fill = bi_class), color = "black", size = 0.025, show.legend = FALSE) +
  bi_scale_fill(pal = "DkBlue", dim = 3) +
  labs(
      title = "Example Bivariate choropleth Map of <span style='color:#D20F26'>USA</span>",
      subtitle = "Dark Blue (DkBlue) Palette in <span style='color:#1A73E8'>biscale</span>",
      caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>" 
  ) +

  bi_theme() +
  theme(
       plot.title = element_markdown(hjust = 0.5,vjust = .5,color = "black",
                                 size = 24, margin = margin(t = 1, b = 12)),
       plot.subtitle = element_markdown(hjust = 0,vjust = .5,size=15),
       plot.caption = element_markdown(face = 'bold',size = 12,hjust = 1)
  )
usa_bivar_2163_them

可视化效果如下:

「双变量图例绘制」

biscale包也提供了用于绘制双变量映射地图图例的简单绘制方法,对于本例子,图例绘制如下:

legend_us <- bi_legend(pal = "DkBlue",
                    dim = 3,
                    xlab = "Higher Income ",
                    ylab = "Higher Travel Time ",
                    size = 6) 
legend_us

图例效果如下:

legend

最后,我们使用cowplot包进行图片组合即可:

library(cowplot)
# combine map with legend
finalPlot <- ggdraw() +
  draw_plot(usa_bivar_2163_them, 0, 0, 1, 1) +
  draw_plot(legend_us, .58, .05, 0.2, 0.2)
finalPlot

最终效果如下:

总结

双变量映射地图其实在很早的时候就准备进行绘制了,虽然查阅到相关绘制资料,但其较多的代码量是我一直不敢写教程(怕自己还没整明白,误导小伙伴们),但是有了biscale包就可以较简单的进行绘制了,这里需要夸下R-ggplot2绘图体系真的十分完善哦好了,本篇推文就结束了,文本需要绘制的数据都可以直接通过安装相应的包进行获取,希望大家可以好好练习下哦~~

参考资料

[1]

Bivariate Choropleth Maps: A How-to Guide: https://www.joshuastevens.net/cartography/make-a-bivariate-choropleth-map/。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

商城小程序项目实现监控的可观测性最佳实践

前言 微信小程序是一种轻量级的应用程序&#xff0c;用户可以在微信内直接使用&#xff0c;无需下载安装。它具有独立的开发框架和生态系统&#xff0c;支持丰富的功能和交互&#xff0c;包括社交、购物、服务等。 观测云对微信小程序的监控能够实时收集性能指标、错误日志和…

su怎么做展厅模型---模大狮模型网

要在SketchUp中创建展厅模型&#xff0c;你可以按照以下基本步骤进行&#xff1a; 绘制基本结构&#xff1a; 使用SketchUp的绘图工具(线条、矩形、圆形等)来创建展厅的基本结构&#xff0c;包括墙壁、地板和天花板等。确保按照实际尺寸和比例进行绘制。 添加家具和展品&…

Mysql新建数据库报错1044

mysql创建数据库报错 1044 - Access denied for user ‘root‘%‘ to database ‘XXX‘ 解决参考&#xff1a;MySQL新建表&#xff1a;1044 - Access denied for user ‘root‘%‘ to database ‘XXX‘终极解决方案_cannot create table [sheet]: 1044 - access denied -CSDN博…

windows允许指定IP段访问本地端口

虚拟机内部应用有时候需要访问windows的一些端口&#xff0c;例如数据库或Redis等&#xff0c;默认情况下&#xff0c;需关闭windows上的防火墙才可正常访问。本文通过在防火墙设置允许指定IP段进行访问来处理&#xff0c;不用每次操作都关闭防火墙。 入站规则-》新建规则 完成…

【Python】输出一个 Python 项目下需要哪些第三方包

方法一 pycharm 方法二 要分析一个 Python 项目下需要哪些第三方包并生成 requirements.txt 文件&#xff0c;你可以使用 pipreqs 工具。以下是具体的步骤&#xff1a; 首先&#xff0c;确保你已经安装了 pipreqs 工具。如果未安装&#xff0c;可以使用以下命令进行安装&a…

ArcGIS二次开发(一)——搭建开发环境以及第一个简单的ArcGIS Engine 程序

Arcgis10.2、Arcgis Engine10.2与Microsoft Visual Studio 2012的版本进行安装 1、推荐教程与安装包2、安装顺序3、安装成功测试VS新建项目可以创建ArcGIS项目&#xff0c;并且在VS中拖拽ArcGIS工具 4、搭建第一个简单的ArcGIS Engine 程序 ArcEngine和VS版本是有对应的&#x…

【已解决】Vue 3+TS项目,无法找到模块“XXX”的声明文件,项目报错无法找到声明文件

前言 最近在做vue 3 TS项目&#xff0c;创建项目时需要引入vue-router 4&#xff0c;在main根文件中引入路由时出现了无法找到引入文件的报错。 解决 最后发现是创建router文件中的index文件时错误的创建为了.js文件&#xff0c;但是在创建框架时默认使用的是TS。将文件类型…

Nginx log文件写入失败?log文件权限设置问题

首先,请确保在Nginx配置文件nginx.conf里允许日志写入,就是如下面这句(样例),把句前的#号去掉: access_log /home/wwwlogs/access.log;或者 access_log /home/wwwlogs/www.mysite.com/access.log;下面是log文件夹及文件权限设置。 1、wwwlogs文件夹权限设置 wwwlogs文…

【嵌入式——QT】多语言界面

【嵌入式——QT】多语言界面 多语言页面开发步骤tr()函数 多语言页面开发步骤 第一步 在你编写的代码中添加tr()函数&#xff0c;方便之后可以精准的定位到你所需要翻译的部分。 第二步 在.pro文件中添加以下代码&#xff0c;这样会让你生成相应的.ts文件&#xff0c;ts文件是…

一身素衣凭栏观景,携几缕清风伴皓月入梦

这个国风两件套真的很难不爱一套上身简直就是梦中的白月光素净优雅又不失清冷气质波浪型门襟绣加上花枝缠绕的绣花图案增添了设计感的同时又不失美感半裙做的是A摆小伞裙的版型裙摆的分割和收褶处理增加了层次感半裙里布很贴心的做了裤里&#xff0c;不易走光夏天穿上这套出街一…

宜搭低代码高级认证实操题1 todolist

进行中待办 已完成待办 待办事项 待办事项远程api和变量配置 回调函数 function didFetch(content) {//console.log(content.data);// content.b 1; 修改返回数据结构中的 b 字段为1let res content.data;let todoList [];for(let i in res){todoList.push(res[i]);}consol…

基于Springboot Vue医院管理系统+数据库脚本+文档(万字)

项目效果视频: 基于Springboot Vue医院管理系统 一、 项目介绍 角色&#xff1a;管理员、患者、医生 基于springboot vue实现的医院管理系统&#xff0c;有管理员、医生和患者三种角色。系统拥有丰富的功能&#xff0c;能够满足各类用户的需求&#xff0c;系统提供了登录和注册…

Reactor设计模式和Reactor模型

Reactor设计模式 翻译过来就是反应堆&#xff0c;所以Reactor设计模式本质是基于事件驱动。 角色 Handle&#xff08;事件&#xff09;EventHandler&#xff08;事件处理器&#xff09;ConcreteEventHandler&#xff08;具体事件处理器&#xff09;Synchronous Event Demult…

day07-缓存商品、购物车

1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓…

分享全栈开发医疗小程序 -带源码课件(课件无解压密码),自行速度保存

课程介绍 分享全栈开发医疗小程序 -带源码课件&#xff08;课件无解压密码&#xff09;&#xff0c;自行速度保存&#xff01;看到好多坛友都在求SpringBoot2.X Vue UniAPP&#xff0c;全栈开发医疗小程序 - 带源码课件&#xff0c;我看了一下&#xff0c;要么链接过期&…

Docker 容器编排利器 Docker Compose

文章目录 一、Docker Compose 简介二、Docker Compose 安装2.1 Mac、Windows 平台默认支持2.2 Linux 安装(通过包管理)2.2.1 安装2.2.2 测试2.2.3 卸载 2.3 使用PIP 安装与卸载2.3.1 PIP安装2.3.2 PIP 卸载 三、基本使用3.1 术语3.2 部署Flask 应用 四、Compose 常用命令4.1 命…

【Java程序设计】【C00351】基于Springboot的疫情居家办公系统(有论文)

基于Springboot的疫情居家办公系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 项目获取 &#x1f345;文末点击卡片获取源码&#x1f345; 开发环境 运行环境&#xff1a;推荐jdk1.8&#xff1b; 开发工具&#xff1a;eclipse以及i…

windows环境安装,GOPATH设置,编写Go代码:

目录 windows环境安装 GOPATH设置&#xff1a; 开始编写Go代码&#xff1a; Go Hello World 实例 执行 Go 程序 注意 使用编译器&#xff1a;Sublime Text - 先进的代码编辑器 windows环境安装 windows环境下&#xff0c;go安装包安装成功后&#xff0c;会自动将go添加到…

cad不用插件怎么批量打印?分享2种轻松的方法!

在工程设计、建筑制图等领域&#xff0c;CAD软件是不可或缺的工具。然而&#xff0c;对于很多用户来说&#xff0c;批量打印CAD文件却是一个让人头疼的问题。难道每次都需要安装繁琐的插件才能实现吗&#xff1f;其实不然&#xff0c;今天我们就来介绍几种无需插件&#xff0c;…

Python爬虫学习完整版

一、什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。 1 爬虫可以做什么 你可以爬取网络上的的图片&#…