前一篇文章提供了中国陆地国界地图的多边形数据,这次将分省的多边形数据及省邻接数据分享给大家。画分省地图,还涉及到填色问题。本文也顺便介绍一下填色算法。

数据的说明

大体来说是每个省一个多边形,中国省级行政区严格来说有34个,但数据提供的多边形是33个。

首先,在地图填色这个问题上,请允许我省略了香港和澳门两个特别行政区。另外,在北京和天津中间有一块河北省飞地,却大到了不能省略的地步。所以河北省包括2个多边形,如下图所示。

给地图填色,有一个基本的规则就是相邻的两个省不能用同一种颜色。所以这里另外有一个信息不得不包含,那就是省与省之间的邻接信息

用python的语义来表达,这个信息用一个字典来表示,每个省是一个键,用一个列表记录了它的所有邻接省。

对于海南岛,认为它与广东相邻;台湾岛,认为它与福建相邻。

如果出现“飞地”这种情况,会导致邻接省变多,甚至于可能导致4种颜色不够填的问题。当然在中国地图上仅河北一块飞地,并没有导致这种问题。虽然4种颜色已经足够了,但为了更好看,在示例图中,我们实际用了5种颜色。只用4色的效果如下,如果你想看更多颜色填图的效果,可以下载并略修改代码。

只用四色的效果

算法的说明

数据中附带了画图的源代码,这次使用的是python自带的tkinter库,所以不用安装任何库就可以直接运行。

代码中包括了读取数据的方法和画多边形的方法,都比较简单。

这里重点介绍一下填色算法。这个算法当然会用到递归。其实凡是用了递归的算法,从概念上都相当简明。

算法是一个函数:填色(setColor),传递三个参数:地图的邻接性信息(以及已填色的区域信息也暂存在其中),可用的颜色列表(避免用全局变量,所以当作参数传递),准备填色的区域。

前两个参数是好理解的,第三个参数,实际上是递归算法的一个标志。

由于填色结果保存在了第一个参数中,所以函数只有一个返回值,就是填色是否成功True/False。

算法的逻辑是这样设计的:

  1. 如果这个“准备填色的区域”已经有颜色了,当然就是成功的,直接返回成功True;
  2. 本区域尚未填色的情况下,查看这个区域周围所有已经填过颜色的邻接区域,那些区域用过的颜色肯定是不能用的。如果在颜色列表中已经没有剩余颜色了,填色失败,返回False;
  3. 本区域尚未填色,并且在列表中有剩余颜色,那就是有成功的机会了,但究竟填哪个颜色合适呢?用循环的方法,一个一个地试。试的标准就是:周围所有邻接区域都能填色成功。注意:这里就出现递归了;
  4. 在循环中,给本区域试填列表中剩下的一种颜色,然后逐一给周围尚未填色的邻接区域填色——调用填色算法:setColor——当然这里第三个参数就变成了对应的区域;
  5. 如果每个邻接区域都返回填色成功(返回True),本区域选择这个颜色也就没有问题了。于是也返回成功True;
  6. 如果有一个邻接区域无法填色(返回False),就说明本区域不能选择这个颜色,换填循环中的下一个颜色,继续试验。转到步骤4;
  7. 如果循环之后,无论使用哪个颜色,都无法给本区域成功填色,只能返回填色失败False。在返回之前,把本区域试填的颜色擦除。

具体的实现细节,请感兴趣的朋友看源代码。

数据和源代码的获取

基于深搜的图片填色算法-Python文档类资源-CSDN下载用深搜算法来验证四色问题,使用了一些不便说明的数据,自己下载看,相信是有用的。更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/xiaorang/63345496

https://download.csdn.net/download/xiaorang/63345496

用Python画填色的中国分省地图(数据+源代码)相关推荐

  1. 利用python画各类世界、中国、区县地图(转)

    首先安装对应的python模块 $ pip install pyecharts==0.5.10 $ pip install echarts-countries-pypkg $ pip install ...

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

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

  3. h5简笔画填色小游戏源码

    下载地址 h5简笔画填色小游戏源码,基于canvas实现的填色. dd:

  4. BIGEMAP离线数据包网盘下载地址:中国高清地图数据,中国高清谷歌数据 密码:1111

    BIGEMAP离线数据包网盘下载地址:中国高清地图数据,中国高清谷歌数据     密码:1111

  5. Python 抓取软科中国大学排名首页数据

    文章目录 利用requests.BeautifulSoup.xlwings库抓取软科中国大学排名首页数据 (1)软科中国大学排名 (2)调用requests模块中get方法,get方法包括header ...

  6. python画航线图_Python:如何在地图上绘制飞行轨迹/航线

    我正试着用位置数据在地图上画出一条飞行路线.在 我得到了一份位置数据,其中还包括其他信息.部分数据附于下文.第五列和第六列分别是lat和lon.在0 C130 30-07-2018 20:07 43. ...

  7. 不能bostype没有元数据异常_手把手教你用Python画个箱形图,找出“脏数据”

    导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础.没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务是检查原始数 ...

  8. python画k线图_python自动获取行情数据,并画k线图

    1.概述 本例子为画k线图,同时画出5日,10日,30日均线,且鼠标移动到上面会显示当前交易日,开盘价,收盘价,最高价,最低价. 移动平均线:Moving Average,简称MA,MA是用统计分析的 ...

  9. python分析政策实施前后_用Python分析春节前后的中国A股市场行情(附源代码)

    最近中国股市也因受到海外市场波动的影响的振幅非常大,又由于马上面临春节了,股市里的钱是取出来放到货币基金里好呢,还是继续放在股市里好呢? 除了对于宏观,行业,个股的分析和把握,我们从历史市场表现的角度 ...

  10. python画正方形-用python画正方形

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在学习python学习教程,我无法打开屏幕进行绘图. 我没有发现错误,它只是 ...

最新文章

  1. 数据库01-范式总结
  2. ITK:计算纹理特征
  3. activemq控制发送频率_发送activemq
  4. 三维视觉前沿进展年度报告
  5. 听说当今程序员很厉害?不,那是你不了解上古时期的那些神级操作
  6. React 的开发成本太高了?
  7. Composer php 类库商店
  8. java 同步块原理_Java同步代码块和同步方法原理与应用案例详解
  9. datagridview 不显示行号的问题
  10. EverWeb for Mac(网页设计软件)
  11. 怎样卸载deepin系统_系统卸载
  12. 中兴服务器iSAC接口默认账号密码和IP
  13. w7设置双显示器_4K+144Hz 支持FreeSync Acer XV273K显示器评测
  14. 快速免费对接快递鸟圆通快递单号查询api接口
  15. matlab1到100求和for_一个简单的MATLAB程序(1到100求和)
  16. 狄利克雷分布公式_一文详解隐含狄利克雷分布(LDA)
  17. 统计学:离散型和连续型随机变量的概率分布
  18. 【转载】知识普及:天煞的HTML5到底是个什么东西
  19. 服务器千兆网卡显示百兆,Cisco 2960交换机,服务器千兆网卡,显示百兆问题?...
  20. 腾讯云轻量2核4G/4核8G/8核16G/16核32G服务器配置详解

热门文章

  1. 测试脚本常用知识点python
  2. 查看磁盘文件夹大小工具WinDirStat
  3. 京东健康打开医疗服务的“脑机”接口
  4. Python标准库(非常经典的各种模块介绍)
  5. 中国重点流域已实现休禁渔制度全覆盖
  6. 计算机怎么用函数算出成绩自评,SPSSAU一众新功能上线:高级公式、综合得分一键计算!...
  7. python3调用arcpy地理加权回归_多元地理加权回归软件使用和含义
  8. 计算机五笔字型编码方法,《计算机汉字输入五笔字型打字速成》汉字编码-输入.pdf...
  9. 自动检测技术学习心得体会_关于传感器与检测技术的学习体会
  10. abb机器人编程指令goto指令_abb机器人编程指令——轨迹偏移使用的指令以及moveL指令...