本文示例代码及文件已上传至我的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. A Child's History of England.43

    PART THE SECOND When the King heard how Thomas à Becket had lost his life in Canterbury Cathedral, t ...

  2. 使用WtmPlus低代码平台提高生产力

    低代码平台的概念很火爆,产品也是鱼龙混杂. 对于开发人员来说,在使用绝大部分低代码平台的时候都会遇到一个致命的问题:我在上面做的项目无法得到源码,完全黑盒.一旦我的需求平台满足不了,那就是无解.   ...

  3. EasyExcel读写Excel

    使用过 poi 的开发同学可能都有此体会,每次都要写一坨代码,最后的代码如下面一样: 这样的代码是不是又臭又长?当字段数量多的时候,一不小心还容易写错.阿粉还记得当初使用 poi 导出一个二十多字段的 ...

  4. static JAVA

    static 关键字:使用static修饰的变量是类变量,属于该类本身,没有使用static修饰符的成员变量是实例变量,属于该类的实例.由于同一个JVM内只对应一个Class对象,因此同一个JVM内的 ...

  5. mybatis中返回自动生成的id

    当有时我们插入一条数据时,由于id很可能是自动生成的,如果我们想要返回这条刚插入的id怎么办呢. 在mysql数据中我们可以在insert下添加一个selectKey用以指定返回的类型和值:     ...

  6. entfrm-boot开发平台一览【entfrm开源模块化无代码开发平台】

    介绍 entfrm-boot是一个以模块化为核心的无代码开发平台,能够让中小企业快速从零搭建自己的开发平台:开箱即用,可插拔可自由组合:以模块化的方式,最大化的代码复用,避免重复开发:无代码可视化开发 ...

  7. 通过js禁用浏览器的回退事件

    js代码: <script> history.pushState(null, null, document.URL); window.addEventListener('popstate' ...

  8. Blazor是春天还是寒风里的挣扎

    官方解释Blazor Blazor允许您使用c#而不是JavaScript构建交互式web UI. Blazor应用由可重用的web UI组件组成,这些组件使用c#.HTML和CSS实现.客户端和服务 ...

  9. [BUUCTF]REVERSE——firmware

    firmware 附件 步骤: 检查文件没有看出什么,ida载入一堆乱码,看了其他师傅的wp才知道要先binwalk对文件进行提取 120200.squashfs这是一个linux的压缩文件 我们需要 ...

  10. 用 shell 脚本做自动化测试

    前言 项目中有一个功能,需要监控本地文件系统的变更,例如文件的增.删.改名.文件数据变动等等.之前只在 windows 上有实现,采用的是 iocp + ReadDirectoryChanges 方案 ...