(数据科学学习手札133)利用geopandas绘制拓扑着色地图

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

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

对于着色方案的生成,我们需要使用到 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

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

Original: https://www.cnblogs.com/feffery/p/15738273.html
Author: 费弗里
Title: (数据科学学习手札133)利用geopandas绘制拓扑着色地图

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/9164/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部