快来看!这样的统计地图真的很好绘制的~~

之前有小伙伴再讨论群里提问关于分级统计地图(choropleth maps) 的绘制方法,刚开始看到这个问题的时候觉得比较简单,就给出了几个处理方法,有R的也有基于Python 的,但后来和提问小伙伴一聊,才知道是要绘制一个有 ”三元相映射图例的” 分级统计地图。之前也答应会出一期类似的推文,中间有太多的事情要做,导致拖得有点久。作为过完年的第一篇原创推文,本期我们就使用可视化功能强大的R来绘制此类地图,主要涉及内容如下:

  • R-tricolore包简介

  • R-tricolore包实践

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

R-tricolore包简介

在得知类似需求后,我就根据类似需求进行资料查询,在经过多次查找之后,就找到了R-tricolore包可以较好的完成类似绘制需求(Python的目前还没找到绘制方法),介绍如下:

1. 官网网址

R-tricolore包的官方网址为:https://github.com/jschoeley/tricolore ,小伙伴们想了解更多的内容可浏览该网址查阅哈。

2. 主要功能

R-tricolore 包可为三元相图的组成成分提供灵活的可视化色标,其主要功能是将任何三元合成颜色编码为三种原色的混合,并绘制合适的颜色键。主要提供以下可视化颜色设置:

  • 离散(discrete)和连续(continuous)色彩支持,

  • 通过居中支持不平衡的成分数据(unbalanced compositional data),

  • 通过缩放支持范围非常窄的数据(data with very narrow range),

  • 色调,色度和亮度选项设置。

3. R-tricolore 包样例

R-tricolore 包提供了丰富的样例供学习参考,接下来,我将列举几个例子方便大家理解:

  • 基本三元图绘制

代码:

library(tricolore)# 生成模拟数据
P <- as.data.frame(prop.table(matrix(runif(3^6), ncol = 3), 1))
# 使用Tricolore生成需要的数据:该步骤最为重要
colors_and_legend <- Tricolore(P, 'V1', 'V2', 'V3')
# 展示生成的数据(部分)
head(colors_and_legend$rgb)
#结果如下
"#A37D7D" "#7A86A1" "#AF9B47" "#6E8E72" "#00AFAE" "#727272"

而使用一下代码就可以直接绘制三元相图:

colors_and_legend$key

结果如下:

  • 三元分级统计地图

绘制完tricolore包主要的绘图方法(用于定制化绘制三元相图),接下来我们看下官网提供的地图映射绘制方法(主要介绍的内容):

「样例一:」

# color-code the data set and generate a color-key
tric_educ <- Tricolore(euro_example,p1 = 'ed_0to2', p2 = 'ed_3to4', p3 = 'ed_5to8')
# add the vector of colors to the `euro_example` data
euro_example$educ_rgb <- tric_educ$rgb
library(ggplot2)
library(ggtern)plot_educ <-# using data sf data `euro_example`...ggplot(euro_example) +# ...draw a choropleth mapgeom_sf(aes(fill = educ_rgb, geometry = geometry), size = 0.1) +# ...and color each region according to the color-code# in the variable `educ_rgb`scale_fill_identity()plot_educ <-plot_educ +annotation_custom(ggplotGrob(tric_educ$key +labs(L = '0-2', T = '3-4', R = '5-8')),xmin = 55e5, xmax = 75e5, ymin = 8e5, ymax = 80e5) +
theme_void() +coord_sf(datum = NA) +labs(title = 'European inequalities in educational attainment',subtitle = 'Regional distribution of ISCED education levels for people aged 25-64 in 2016.')

可视化结果如下:

「样例二:breaks = 2」

# color-code the data set and generate a color-key
tric_educ_disc <- Tricolore(euro_example,p1 = 'ed_0to2', p2 = 'ed_3to4', p3 = 'ed_5to8',breaks = 2)
euro_example$educ_rgb_disc <- tric_educ_disc$rgbggplot(euro_example) +geom_sf(aes(fill = educ_rgb_disc, geometry = geometry), size = 0.1) +scale_fill_identity() +annotation_custom(ggplotGrob(tric_educ_disc$key +labs(L = '0-2', T = '3-4', R = '5-8')),xmin = 55e5, xmax = 75e5, ymin = 8e5, ymax = 80e5) +theme_void() +coord_sf(datum = NA) +labs(title = 'European inequalities in educational attainment',subtitle = 'Regional distribution of ISCED education levels for people aged 25-64 in 2016.')

可视化结果如下:

「样例三:Ternary centering」

tric_lf_non_centered <- Tricolore(euro_example, breaks = Inf,'lf_pri', 'lf_sec', 'lf_ter')euro_example$rgb_lf_non_centered <- tric_lf_non_centered$rgbggplot(euro_example) +geom_sf(aes(fill = rgb_lf_non_centered, geometry = geometry), size = 0.1) +scale_fill_identity() +annotation_custom(ggplotGrob(tric_lf_non_centered$key +labs(L = '% Primary', T = '% Secondary', R = '% Tertiary')),xmin = 55e5, xmax = 75e5, ymin = 8e5, ymax = 80e5) +theme_void() +coord_sf(datum = NA) +labs(title = 'European inequalities in labor force composition',subtitle = 'Regional distribution of labor force across the three sectors in 2016.')

可视化结果如下:

当然通过设置还可以绘制如下可视化效果:

而对于三元相图以及地图属性的设置可通过如下GIF动图进行详细设置:

DemoTricolore()设置

R-tricolore包实践

由于上述介绍的都是官网的例子,这部分我们使用新的数据进行这种 “三元分级统计地图” 的绘制,详细内容如下(数据和相关代码之前的推文绘图技巧 | 双变量映射地图可视化绘制方法 类似,这里直接给出相应的代码:

  • 地图数据可视化

代码:

library(sf)
library(tidyverse)
library(hrbrthemes)
library(tricolore)us_data <- socviz::county_data %>% select(id,fips,name,state, land_area,hh_income,pop)
tric_usdata <- Tricolore(us_data,p1 = 'land_area', p2 = 'pop', p3 = 'hh_income',breaks = 3)
#添加新数据
us_data$us_rgb <- tric_usdata$rgb               country_sf <- albersusa::counties_sf()
country_sf <- mutate(country_sf,fips=as.character(fips)) #mutate()生成新列
tri_data <- left_join(country_sf,us_data,by = c("fips"="id"))
us_map2 <- ggplot(data = process_data_2163) +geom_sf(aes(fill=us_rgb,geometry = geometry),size=.1) +scale_fill_identity() # 该步骤确保每个区域之为对应的颜色值

可视化结果如下:

  • 添加三元相及美化

final_map <-us_map2 +annotation_custom(ggplotGrob(tric_usdata$key+theme(text = element_text(size = 8),plot.background = element_rect(fill = "#F0E5DE",colour = "#F0E5DE"))),xmin = 1478654 , xmax = 568885.4 , ymin = -2642789, ymax = -1753061) +labs(title = "Example Ternary Choropleth Map of <span style='color:#D20F26'>USA</span>",subtitle = "Made in <span style='color:#1A73E8'>tricolore</span>",caption = "Visualization by <span style='color:#DD6449'>DataCharm</span>" ) +theme_void(base_family = "Roboto Condensed") +theme(plot.background = element_rect(fill = "#F0E5DE",colour = "#F0E5DE"),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))

最终的可视化结果如下:

总结

作为过完年的第一篇原创推文还是以小编喜欢的空间可视化作品开始,希望小伙伴们可以从中获取绘图灵感,大家也可以结合绘图技巧 | 双变量映射地图可视化绘制方法 这篇推文进行对比绘制。

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

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

相关文章

2024五一杯数学建模C题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

四.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合&#xff0c;并且略过了音频部分时&#xff0c;我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中&#xff0c;我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…

lua 环境安装

下载地址&#xff1a; https://luabinaries.sourceforge.net/download.html 安装环境变量 检查一下是否安装成功&#xff0c;有版本号&#xff0c;打印一句话&#xff0c;如下表示成功 idea 安装插件&#xff0c;方便编写lua脚本 配置一下idea 运行测试 local function m…

经典文献阅读之--Light-LOAM( 基于图匹配的轻量级激光雷达里程计和地图构建)

0. 简介 将SLAM应用于机器人应用中&#xff0c;可靠性和效率是两个最受重视的特性。本文《Light-LOAM: A Lightweight LiDAR Odometry and Mapping based on Graph-Matching》考虑在计算能力有限的平台上实现可靠的基于激光雷达的SLAM功能。首先与大多数选择点云配准的显著特征…

国税发票查验接口、电子增值税发票查验接口、数电票查验接口

翔云发票查验接口支持增值税发票管理系统开具发票的真伪&#xff0c;通过发票代码、号码、日期、金额、校验码四要素信息进行真伪的查验&#xff0c;支持返回全票面信息&#xff0c;API接口便于集成&#xff0c;可适用于多种应用场景。 发票查验接口python调用示例&#xff1a;…

正则表达式(Regular Expression)

正则表达式很重要&#xff0c;是一个合格攻城狮的必备利器&#xff0c;必须要学会&#xff01;&#xff01;&#xff01; &#xff08;参考视频&#xff09;10分钟快速掌握正则表达式&#xff08;奇乐编程学院&#xff09;https://www.bilibili.com/video/BV1da4y1p7iZ在线测试…

分布式监控平台---Zabbix

一、Zabbix概述 作为一个运维&#xff0c;需要会使用监控系统查看服务器状态以及网站流量指标&#xff0c;利用监控系统的数据去了解上线发布的结果&#xff0c;和网站的健康状态。 利用一个优秀的监控软件&#xff0c;我们可以&#xff1a; 通过一个友好的界面进行浏览整个…

CSRF漏洞详解

目录 什么是同源策略 什么是csrf CSRF 攻击会产生什么影响&#xff1f; CSRF漏洞low等级复现 什么是同源策略 协议相同 域名相同 端口相同 什么是csrf 跨站请求伪造&#xff08;也称为 CSRF&#xff09;是一种 Web 安全漏洞&#xff0c;允许攻击者诱导用户执行他们不打…

华为各级OD薪资曝光。。

华为 OD 薪资 之前写过几篇华为 OD 的算法题&#xff0c;后来有不少同学问起&#xff0c;华为 OD 薪资到底怎么样。 华为 OD 的薪资待遇&#xff0c;网上信息不多&#xff0c;只找到一篇相对靠谱的爆料&#xff1a; 上述是月 base 的爆料&#xff0c;然后通常 OD 是 15-16 薪。…

如何连通私有子网中的 MSK / Kafka 集群?

MSK 集群通常都是建在私有子网中的&#xff0c;这给本地访问带来了很多麻烦&#xff0c;特别是需要在本地使用 Kafka GUI 客户端管理和读写 MSK 数据的时候。本文会给出一套解决方案。 我们这里讨论的问题有一点特殊性&#xff0c;那就是&#xff1a;由于 MSK 是托管服务&…

标准版uni-app移动端页面添加/开发操作流程

页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的.vue文件或.nvue文件。 .vue页面和.nvue页面&#xff0c;均全平台支持&#xff0c;差异在于当uni-app发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&#xff0c;.nvue会使用原生进行渲染。…

单元测试四大过程

单元测试四大过程&#xff08;蓝桥课学习笔记&#xff09; 单元测试过程 单元测试是软件测试过程中的一个关键环节&#xff0c;它与集成测试、系统测试一样&#xff0c;分为测试策划、测试设计、测试执行和测试总结几个阶段。 单元测试过程中每个阶段需要完成的主要工作如下&…

Ubuntu配置VScode的C++环境

在Ubuntu系统下配置C环境&#xff0c;并运行helloworld 1. 下载VScode 我这里使用的是星火应用商店&#xff0c;在商店里面可以直接下载安装 http://spark-app.store/ 2.创建文件夹 3.启动VScode并打开该文件夹 4.安装以下几个扩展 PS&#xff1a;Clang这个插件别安装&…

使用TomCat写Film前后端项目0414

使用TomCat写Film前后端项目源文件0414-CSDN博客 实现功能&#xff1a; 得到数据库所有电影数据在首页显示出来 添加 删除 修改 点击修改&#xff0c;获取编号id&#xff0c;传入到根据id编号查询数据的控制器转发数据到 修改的jsp页面。 获取修改数据传入到根据id修改数据的控…

【word2pdf】Springboot word转pdf(自学使用)

文章目录 概要整体介绍具体实现官网pom文件增加依赖 遇到的问题本地运行OK&#xff0c;发布到Linux报错还是本地OK&#xff0c;但是Linux能运行的&#xff0c;但是中文乱码 小结 概要 Springboot word 转 pdf 整体介绍 搜了一下&#xff0c;发现了能实现功能的方法有四种 U…

JDBC 数据库连接

文章目录 JDBC核心技术第1章&#xff1a;JDBC概述1.1 数据的持久化1.2 Java中的数据存储技术1.3 JDBC介绍1.4 JDBC体系结构1.5 JDBC程序编写步骤 第2章&#xff1a;获取数据库连接三要素2.1 要素一&#xff1a;Driver接口实现类2.1.1 Driver接口介绍2.1.2 加载与注册JDBC驱动 2…

SETR——Rethinking系列工作,展示使用纯transformer在语义分割任务上是可行的,但需要很强的训练技巧

题目:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers 作者: 开源:https://fudan-zvg.github.io/SETR 1.研究背景 1.1 为什么要研究这个问题? 自[ 36 ]的开创性工作以来,现有的语义分割模型主要是**基于全卷积网络( FCN )的…

windows网络驱动开发

基石&#xff1a;WFP 1、简介 Windows过滤平台&#xff08;Windows Filtering Platform, WFP&#xff09;&#xff0c;是从Vista系统后新增的一套系统API和服务。开发者可以在WFP框架已划分的不同分层中进行过滤、重定向、修改网络数据包&#xff0c;以实现防火墙、入侵检测系…

GNU Radio Radar Toolbox编译及安装

文章目录 前言一、GNU Radio Radar Toolbox 介绍二、gr-radar 安装三、具体使用四、OFDM 雷达仿真 前言 GNU Radio Radar Toolbox&#xff08;gr-radar&#xff09;是一个开放源码的工具箱&#xff0c;用于 GNU Radio 生态系统&#xff0c;主要目的是为雷达信号处理提供必要的…

JDK自带的线程池有哪些?

1、Executors.newFixedThreadPool(4); // 核心线程 传几个就有几个核心线程和最大线程数 2、Executors.newCachedThreadPool(); // 核心线程0 &#xff0c;全是临时工&#xff0c;最大线程数为21亿 3、Executors.newScheduledThreadPool(4); // 传几个就有几个核心线程&#xf…