本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes

1 简介

  我们在绘制某些地图时,为了凸显出每个独立的区域,需要满足拓扑着色要求,即所有相邻的区域不可以用同一种颜色绘制,以前的手绘地图需要绘制者自行思考设计具体的着色规则,而现如今通过计算机的辅助,我们可以快速生成大量的着色方案。

  今天我们就来学习配合geopandas如何快速实现地图的拓扑着色。

2 基于mapclassify的地图拓扑着色

  对于着色方案的生成,我们需要使用到mapclassify这个第三方库,以前我的geopandas系列文章分层设色篇也介绍过其中的诸多功能,而本文需要使用到其特殊的greedy功能。

  以中国县级单元矢量边界数据为例,它包含了共2900个县级单元的行政区划面矢量要素:

  对于这样一个典型的面要素众多的地图,利用mapclassify.greedy(),我们可以基于面要素之间的邻接拓扑关系,快速生成一定配色数量的方案出来,greedy()的主要参数如下:

  • gdf:GeoDataFrame型,用于传入待处理的地理数据框
  • strategy:str型,用于设定拓扑着色所采取的具体策略,默认为balanced(这也是QGIS中拓扑着色所使用的方法),其余可选策略有'largest_first''random_sequential''smallest_last''independent_set''connected_sequential_bfs''connected_sequential_dfs''connected_sequential''saturation_largest_first''DSATUR'等,详细介绍见https://networkx.github.io/documentation/stable/reference/algorithms/generated/networkx.algorithms.coloring.greedy_color.html
  • balance:str型,当strategy='balanced'时,用于设定如何进行“平衡”着色,默认为'count',可选项如下,其中除了'count'方式以外,其余方式均需要输入的GeoDataFrame为投影坐标系:
    • count:尽量保持每种颜色对应的面要素数量平衡
    • area:尽量保持每种颜色对应的面要素面积之和平衡
    • centroid:尽量保持每种颜色对应的面要素之间重心距离平衡
    • distance:尽量保持每种颜色对应的面要素之间拓扑距离平衡
  • min_colors:int型,当strategy='balanced'时,用于设置色彩方案至少的色彩数量,最后运算产生的色彩划分结果可能会大于这个参数
  • sw:str型,用于设定拓扑邻接关系判定策略,'rook'表示共边邻接'queen'表示共点邻接,默认为'queen'
  • min_distance:数值型,默认为None,有时由于数据质量、精度的原因,可能会导致肉眼看起来的邻接实际上仍然存在一定的“间距”,这时就可以使用min_distance参数来设定距离阈值来帮助greedy捕捉相邻面要素关系,即面要素两两之间拓扑距离小于min_distance时也视作“邻接”

  知晓了greedy()的主要参数后,我们下面来演示如何使用它来辅助制作拓扑着色地图。

  首先我们需要向greedy()中传入对应的面要素GeoDataFramegreedy()会根据我们的参数设定为每一个面生成一个标签,我们只需要将此标签列作为绘图着色映射列即可,可以看到最终得到的标签方案中共有7种不同标签,虽然按照四色问题的猜想,任何拓扑着色地图只需要4种颜色即可完成色彩填充,但在有限的计算时间内,greedy()给出了还不错的方案:

  按照标签进行颜色分配:

  放大仔细发现,每个邻接的区域的确实现了颜色不重合:

  而如果你希望用自定义色彩值来配合标签字段进行映射,则可以参考我下面的做法,将具体的颜色值譬如16进制色彩字符串传入color参数,这里使用到以前介绍过多次的配色库palettable


  以上就是本文的全部内容,欢迎在评论区与我进行讨论~

(数据科学学习手札133)利用geopandas绘制拓扑着色地图的更多相关文章

  1. (数据科学学习手札146)geopandas中拓扑非法问题的发现、诊断与修复

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,geopandas作为在Pyt ...

  2. (数据科学学习手札111)geopandas 0.9.0重要新特性一览

    本文示例文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在几天前,geopandas释放了其最新正式版 ...

  3. (数据科学学习手札129)geopandas 0.10版本重要新特性一览

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 就在前不久,我们非常熟悉的Python地理 ...

  4. (数据科学学习手札89)geopandas&geoplot近期重要更新

    本文示例代码及数据已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 最近一段时间(本文写作于2020-07-1 ...

  5. (数据科学学习手札139)geopandas 0.11版本重要新特性一览

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,就在几天前,geopandas ...

  6. (数据科学学习手札75)基于geopandas的空间数据分析——坐标参考系篇

    本文对应代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中我们对geopandas中的数据结 ...

  7. (数据科学学习手札55)利用ggthemr来美化ggplot2图像

    一.简介 R中的ggplot2是一个非常强大灵活的数据可视化包,熟悉其绘图规则后便可以自由地生成各种可视化图像,但其默认的色彩和样式在很多时候难免有些过于朴素,本文将要介绍的ggthemr包专门针对原 ...

  8. (数据科学学习手札42)folium进阶内容介绍

    一.简介 在上一篇(数据科学学习手札41)中我们了解了folium的基础内容,实际上folium在地理信息可视化上的真正过人之处在于其绘制图像的高度可定制化上,本文就将基于folium官方文档中的一些 ...

  9. (数据科学学习手札40)tensorflow实现LSTM时间序列预测

    一.简介 上一篇中我们较为详细地铺垫了关于RNN及其变种LSTM的一些基本知识,也提到了LSTM在时间序列预测上优越的性能,本篇就将对如何利用tensorflow,在实际时间序列预测任务中搭建模型来完 ...

随机推荐

  1. 14 - springboot的@Configuration、@Bean、@Import()、@ImportResource()、@Conditional说明

    1.@Configuration.@Bean.@Import().@ImportResource().@Conditional 分析源码的时候总会见到标题中的这几个注解,因此:弄一篇博客来说明一下吧, ...

  2. Linux 参数代换 命令 xargs

    xargs 命令也是管道命令中的一员.xargs命令的功能简单来说就是参数代换.那么什么叫做参数代换,这里首先要了解管道的概念.在 linux管道 命令一节中我们详细介绍了管道命令的概念.这里我们只是 ...

  3. A Child's History of England.24

    Besides all these troubles, William the Conqueror was troubled by quarrels among his sons. He had th ...

  4. day04 sersync实时同步和ssh服务

    day04 sersync实时同步和ssh服务 sersync实时同步 1.什么是实时同步 实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器. 2.为什么使 ...

  5. gen already exists but is not a source folder. Convert to a source folder or rename it 的解决办法

    1. Right click on the project and go to "Properties" //鼠标右键点击项目,然后选中Properties   2. Select ...

  6. vue-cli4脚手架搭建三

    组件传值 <script> import LunBo from "./LunBo"; export default { name: 'Home', components ...

  7. Oracle学习笔记(1)

    折腾了好久 终于把oracle安装成功了.小兴奋下. 创建了一个数据库 dabook. run--> Services.msc查看服务: 可以看到DABOOK的服务已启动. 1,sys用户 在c ...

  8. linux系统下命令的学习

    本博客是本人工作时做的笔记 ps aux |grep ^profile |grep A190200024 ^ 表示行首匹配 linux查看文件大小: 具体可查看:https://www.cnblogs ...

  9. Hibernate的基本功能:对数据库的增删改查(创建对象实例)

    一.通过实例化的对象向数据库添加新记录 package com.yh.test; import org.hibernate.Session; import org.hibernate.SessionF ...

  10. ciscn_2019_s_3

    拿到题目例行检查 64位程序开启了nx保护,将程序放入ida 看到没有system函数第一时间想到的就是泄露libc来做,后来才知道是我学识尚浅,需要用execve函数来做 进入main发现跳转到vu ...