这些天在做基于Mapbox的数据可视化,在从地图看疫情 by Mofei Zhu文章中看到了填色专题图,感觉很有意思,如下。

决定动手实现下。

首先,在这篇文章中,作者提到了大概思路:

其实在Mapbox的地图中,我们可以在Studio中上传国家、省份、洲、城市等多边形数据,然后在Style中引用这个数据图层,也可以使用我们自带的商业边界数据。同时我们的GL JS SDK 支持根据瓦片中的数据进行配色的的功能,在Mapbox中我们把它叫做Expression。

后面,经过思考和尝试,我理解到这段话其实包含了两种思路:

  1. 直接在Mapbox Studio上传数据,根据属性值调整配色;
  2. 添加fill图层,使用Mapbox Expression调整配色。

两种方法的难点都在于GeoJSON数据的获得。
处理步骤如下:

  1. 寻找中国地图GeoJSON文件,我在@yezongyang的GitHub仓库上寻找到了该文件。

  1. 添加可视化属性,本次可视化使用截止到2020-04-03日的所有Confirmed、Recovery、Deaths数据,因为本次只对省级数据进行了可视化,所以只需在数据库中按省份进行分组查询即可得到每个省份的以上数据,接着就是常规操作,为GeoJSON properties添加这几个属性就OK,示例:
"properties": {"childNum": 17,"size": "1700","name": "河南省","id": "41","cp": [113.0668,33.8818],"confirmed": 1276,"deaths": 24,"recovery": 1270}
  1. 保存为文件。

下面进行两种方法的实践。

一 Mapbox Studio

首先,打开Mapbox Studio,点击new style


点击Customize Monochrome进行自定义数据的上传。


点击Upload data即可上传自己的GeoJSON数据了。

上传成功后为纯黑色。


接着按照Confirmed调整颜色。


我按照以下规则进行调整:

[0, "#ffd0a6"],
[10, "#ffd0a6"],
[100, "#ffaa7f"],
[500, "#ff704e"],
[1000, "#f04040"],
[10000, "#b50a09"]

结果如下:

接着将其发布,然后在自己的Mapbox应用里引用为底图就可以了。
或者你也可以发布个空地图,然后按照流程添加填色图,最后在你的Mapbox应用里添加图层也是可以的。

二 添加GeoJSON图层

上面这个方法固然可以实现效果,但是动态变化难以实现,例如,我想能够快速切换显示的属性,如果仍使用第一种方法,就只好发布三个图层,然后切换显示,这样效率不高。

而且,对于一些需要保密的数据,为了安全,一般也不能将其上传到地图发布的服务器上,因此,可以考虑第二种方法:在前端使用程序添加GeoJSON图层,在后端根据查询条件生成GeoJSON数据,需要数据时访问后端接口即可。前端代码如下:

      map.addSource("fillSourceID", {type: "geojson" /* geojson类型资源 */,data: china /* geojson数据 */});map.addLayer({id: "fillID",type: "fill" /* fill类型一般用来表示一个面,一般较大 */,source: "fillSourceID",paint: {"fill-color": {property: "confirmed", // this will be your density property form you geojsonstops: [[0, "#ffd0a6"],[10, "#ffd0a6"],[100, "#ffaa7f"],[500, "#ff704e"],[1000, "#f04040"],[10000, "#b50a09"]]},"fill-opacity": 1 /* 透明度 */}});

​使用该种方式,程序员可以自由控制展示的属性、展示的颜色配置和展示数据的时间周期等,程序的可扩展性得到了很大的增强。

在本程序开发中,我也实现了​图层的切换,并不复杂,在此不叙述了。

多说一句,如果想做随时间的变化的填色图,就也不得不考虑这种方式,因为发布这么多地图是很蠢的行为。采取程序的方式,即可动态的根据要求查询数据库,获得对应的GeoJSON数据,从而可视化为填色图。

@GitHub

@微信公众号:林木菌

如果有任何问题,欢迎与我交流~~

Mapbox可视化之填色图相关推荐

  1. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  2. python气象数据可视化学习笔记7——利用cartopy+cnmaps和ERA5数据绘制填色图并对中国地区白化

    文章目录 1. 效果图 2. 绘制基于中国地区的填色图(大地图) 3. 添加南海小地图 4. 读取数据并传入绘图函数 5. 代码完整版 1. 效果图 前序博文cnmaps填色图介绍了cnmaps在线地 ...

  3. python绘制气象海洋不规则空间站点数据的填色图

    大气海洋领域有很多空间分布的二维数据需要绘制成填色图(或等值线图),python中常用matplotlib中的contour或contourf函数,但是这两个函数要求数据分布于规则网格上. 对于很多模 ...

  4. python绘制contourf填色图,设置色标,解决填图的颜色与实际数值不一致的问题

    import matplotlib as mpl from matplotlib import cmfs = 13 # 设置字体大小 # 设置色条 cmap = cm.get_cmap('jet') ...

  5. 2、Python绘制等值线图与填色图

    目录 一.导入软件包 二.读取文件并进行数据处理 三.绘制等值线图 四.绘制填色图 本文主要介绍如何利用Python绘制等值线图以及填色图,因需要利用Cartopy软件包,请提前配置好Python环境 ...

  6. python绘制contourf填色图,数值超出色条设定的范围时出现空白区域

    法1.cmap.set_over('yellow') 法2.plt.colorbar(im1, cax=ax9, extend='max') 法3.plt.clim(0, 30) # clim即col ...

  7. python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...

    更新完整版,修复了几个小问题,提供了测试数据下载 最新版见此 EOF(经验正交分解)是气候研究中常用的研究变量时空变化特征的分析方法,短期气候课中都学过中国东部夏季降水通过EOF分解可以分为三类雨型, ...

  8. python画填色图时,如何让分层的填色变为渐变色

    python画填色图时,如何让分层的填色变为渐变色 注:自己用来备忘的 以画海洋的地形图为例 数据为一个三位数据,有经度(lon),纬度(lat),高度(z)三个变量. 我们绘制的地形图为了美观,只想 ...

  9. Python学习笔记——绘图设置(二)填色图与等值线图

    import numpy as np import matplotlib.pyplot as plt delta = 0.025 x = np.arange(-3., 3., delta) # 创建x ...

最新文章

  1. VS2005调试ASP.NET出现未能开始侦听端口解决办法
  2. STL-hasmap源码
  3. socket java 服务器端_Java 简单的Socket通讯的服务器端实现
  4. Linux 安装Zookeeper单机版(使用Mac远程访问)
  5. java相除保留两位小数_Java:Java快速入门
  6. 408最后计算机网络题库,2021考研计算机统考408专业基础综合题库
  7. 笔记本AutoCAD启动时闪退怎么办_戴尔笔记本电脑开不了机如何解决【解决方法】...
  8. LeetCode 152. 乘积最大子序列(DP)
  9. 【重磅快讯】T11 2019数据智能技术峰会举办,AI将成为行业颠覆者
  10. Maven 创建、测试工程
  11. error: failed to launch '/private/var/mobile/Applications/** busy解决办法
  12. Java调用python传参数并获取python返回的值
  13. mine 规范_2016国家最新设计及验收标准名称汇编GB
  14. 永洪BI开发脚本总结
  15. 雷达的工作原理示意图_5张图1个视频,科普激光雷达工作原理
  16. 2022-4-12作业
  17. svn: E230001: Server SSL certificate verification failed: certificate issued for a different hostnam
  18. 第02章 HTML基本标签
  19. 【蓝桥杯2022】- 数的拆分
  20. 《滚雪球:巴菲特和他的财富人生》【美】艾丽斯·施罗德著

热门文章

  1. 什么是聚合支付?聚合支付的优势?
  2. 5个文献免费下载神器
  3. 排序--Bubble的三种优化
  4. 使用Matlab画出复杂网络博弈中热图(三维图)(学术论文)
  5. 使用k-d树进行无序点云去噪
  6. 油脂抵近历史高点,棕榈油认购大涨,CCS05继续向下2022.3.1
  7. C语言rot90的头文件,python – np.rot90()破坏了opencv图像
  8. 洛谷 P1618 STL全排列方法
  9. scratch中植物大战僵尸之会收集太阳的的太阳花
  10. 智邦国际ERP生产排产缩短生产周期