2021年的最后一天,本年度最后一篇推送,不过,如果要说是过年的话:

[花絮]三与迷之自信

人类自古有各种数字迷信,西方特别迷信3:

——毕达哥拉斯认为,3是宇宙的基础,是最完美的数字

所以,学术上牛顿有物理三大定律,

政治上有三权分立,

连西方大部分国家的国旗都三色旗:

今日乳法 (1/1)

所以,数学也是一样,费马猜想四色猜想哥德巴赫猜想被认为是近代数学三大难题。

当然,在国内最出名号称民科身份证的哥德巴赫猜想(如果你没有证明过哥德巴赫猜想,都不好意思说自己是民科)……据说,中科院数学所每年收到的有关哥猜的证明信能绕地球一圈。

但是,不出所料,就是里面肯定没有一篇是对的:其中绝大多数错误更是甚至都不超出中学数学的常识范围。比如传说中的把d约掉:

还有用企图用初中数学证明哥德巴赫猜想的:

最后,信件实在太多了,数学所的研究人员全部转职为审稿人也都搞不定,所以最有研究人员都只能定下一个潜规则:所有有关哥猜的信件,都不看、不评、不研究:

……但是出于礼貌都会回信告知其正确的途径是:先写成论文,再向学术期刊投稿。(不过所有的民科,都认为论文是官科对民科的压榨,因为他们不会写论文……)

然而,依然有无数想着一鸣惊人的民科,想靠一个草稿本就打遍天下无敌手……他们不远万里,带着自己的草稿蹲守在中科院数学与系统科学研究门口,要求专家鉴定。

好吧,说到这里,民科领域也有三大最出名的目标,分别是永动机、相对论和哥猜……传说百度的民科吧里面,永动机每天都会被发明32次,

而相对论每天都会被推翻无数次,不过这些年哥猜好像落伍了,民科们转向玩量子力学了……

好了,花絮到此为止。

我在以前写空间统计里面的中位数中心算法的时候,简单介绍过费马大定理,今天我们想给大家介绍三大数学难题里面的另外一个,就是“四色猜想”问题。

四色猜想可以简单描述为:任意地图的划分区域,都可以只使用四种颜色来进行渲染,并且保证没有任意两个邻接的区域内的颜色相同。如下图所示:

不管你用何种奇葩诡异的图形,都不可能在一个平面或者球面上构建五个以上两两相邻的区域:这个是二维平面的拓扑学和图形学上面的一个基本理论或者说固有属性:即平面内不可出现交叉而没有公共点的两条直线

之所以称之为“猜想”,就是因为没有具体的证明方法,所以一百多年来,无数数学家和爱好者,都希望证明或者推翻这个猜想,但是不管他们构建任何奇葩的图形组合,都只能从侧面上证明这个定理的有效。

俗话说:只要马力大,板砖也能飞……计算机面世之后,自然开启了数学定律的暴力破解时代。1976年6月,在美国伊利诺斯大学的两台不同的电子计算机上,几个数学家用了1200个小时,作了100亿个判断,结果依然证明了没有任何一张地图是需要五色的,从某种程度上“验证”四色猜想的正确性。

不过计算机给出来的证明毕竟没有太有力的理论说服力(计算机推理不可能给出合理的思考过程),特别不管计算机发展得再高级,也无法穷尽所有的可能性,所以这个四色猜想一直还在不断的“猜想”中。

一个多世纪以来,数学家们为证明这条定理绞尽脑汁,所引进的概念与方法刺激了拓扑学与图论的生长、发展。在“四色问题”的研究过程中,不少新的数学理论随之产生,也发展了很多数学计算技巧。如将地图的着色问题化为图论问题,丰富了图论的内容。不仅如此,“四色问题”在有效地设计航空班机日程表,设计计算机的编码程序上都起到了推动作用。

虽然四种颜色就可以对地图就行标识性渲染了(每个斑块都与相邻斑块颜色不一样),但是我国的标准地图一直采用的是五色标识法,如下所示:

比如自然资源部给出来的这张标准地图,就用了下面五种颜色:

当然,每个省(斑块)的配色方式,并非是一成不变的,比如下面这1699号地图,依然是这五种颜色,但是各个省的配色又不一样。即:全局上是统一用这五种颜色,但是局部上,每种颜色的使用、分布以及相邻规则,都不受限制。

那么怎么进行五色(四色)配图呢?很多年前,虾神和同事们讨论过这个问题,但是大多都是采用自己写算法来实现的,原理就是先构建空间关系矩阵,然后分类挑选出不相邻的部分,给予一个颜色标号就行。

但是现在不用这么麻烦了,今天给大家介绍一个非常简单的工具包来实现五色地图的绘制方法,先看结果:

这里要推荐的包,就是经典的地图配色分级包:mapclassfiy

访问地址:https://pypi.org/project/mapclassify/

我们在介绍栅格配色的时候,已经对这个包进行了简介,这里就不赘述了,大家可以去翻以前的文章:

栅格数据配色的几种小技巧

今天要介绍的mapclassify下面的一个配色方法:

mapclassify.greedy

我们来看看这个方法是干嘛的:

greedy(gdf, strategy='balanced',     balance='count', min_colors=4,     sw='queen', min_distance=None,     silence_warnings=True, interchange=False)    Color GeoDataFrame using various strategies of     greedy (topological) colouring.       Attempts to color a GeoDataFrame using as     few colors as possible, where no    neighbours can have same color as     the feature itself. Offers various strategies    ported from QGIS or implemented within networkX     for greedy graph coloring.       ``greedy`` will return pandas.Series     representing assinged color codes.

官方的解释是:在这个方法会使用各种贪婪(拓扑)着色策略为你的GeoDataFrame进行着色渲染。

算法会尝试使用尽可能少的颜色为 GeoDataFrame 进行着色,而且保证任何没有任何一个要素的邻居会具有与要素本身相同的颜色。

里面提供了提供若干种策略供选择,算法移植从QGIS中进行移植,并且在networkx中实现(所以这个包需要依赖于networkx包)。

最后返回表示分配的颜色代码的 pandas.Series。

我们来看一个例子:

我们使用中国的省级行政区划,然后利用greedy方法,可以看见,唯一值只有四种:

然后渲染一下:

注意,我这里使用了strategy参数(分配策略),这个参数默认情况下用的balanced(平衡策略,而平衡策略最少得5种颜色……当然,也可以增加更多的颜色分配)而采用其他的策略,就都是四色分配法了:

每种算法的具体说明,请参考:

Adrian Kosowski, and Krzysztof Manuszewski, Classical Coloring of Graphs, Graph Colorings, 2-19, 2004. ISBN 0-8218-3458-4.

论文地址:

https://fileadmin.cs.lth.se/cs/Personal/Andrzej_Lingas/k-m.pdf

当然,我们也可以绘制一个复杂点的,比如山东县级数据,一共137个区县:

如果做四色分布,结果如下:

其他的参数,大家可以参考官方代码帮助,下面我们给出中国地图的绘制方法,里面比较核心的地方,就是怎么制作中国国界线那一圈带阴影的边界:

实际上以前看过虾神的文章的同学都知道,这种阴影的作法,就是对国界线进行多环缓冲区,我们放大就会发现,这是很多圈组成的:

代码如下:

然后就可以绘图了:

所有的代码都在老地方:

https://gitee.com/godxia/python_map_visualization

009四色图可视化

打完收工

虽然是公历年,好歹也是过年了,所以最后:

[虾神GIS制图课堂]四色地图配色法相关推荐

  1. ArcGIS制作四色地图

    ArcGIS制作四色地图 工作中经常要把mapinfo的tab地图文件转化为arcgis的shape文件,导致原先地图渲染的颜色丢失,每次都要重新给地图着色,十分麻烦.笔者寻觅很久,在网上找到一个四色 ...

  2. 四色地图理论的图论证明

    四色地图理论的图论证明 四色地图理论我就不多说了,四色猜想与哥德巴赫猜想.费马定理成为了近代三大数学难题. 首先,大家看一个的图,平面中圆点标号1,2,3,4. 两两之间有连线.将平面切分为四个区域a ...

  3. python填充周围图片的颜色搭配_四色地图填充程序(Python opencv)

    代码使用了floodfill填充函数: cv.floodFill(copyImage, mask, (x,y), (0, 255, 255), (0, 100, 100), (50, 50, 50), ...

  4. 数据结构实验 四色地图染色 c语言实现

    main.c #include"map.h" //#include"stack.h" #include<stdio.h> //一个邻接矩阵 int ...

  5. Python实现地图四色原理的遗传算法(GA)着色实现

    1 任务需求   首先,我们来明确一下本文所需实现的需求.   现有一个由多个小图斑组成的矢量图层,如下图所示:我们需要找到一种由4种颜色组成的配色方案,对该矢量图层各图斑进行着色,使得各相邻小图斑间 ...

  6. java 地图四色着色算法_趣味地图系列之6 四色定理之我见

    四色定理(four color map theorem)是一个著名的数学定理[1],即对任意的(平面上的)地图染色,要求相邻的国家颜色不同,四种颜色即可完成着色. 南非数学家法兰西斯·古德里在1852 ...

  7. 地图四色着图的C语言实现

    四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...

  8. 地图绘制和四色算法,图搜索算法,最小生成树算法,最短路径算法

    基于简易Web墨卡托计算实现地图绘制,四色染色,实现图的深度优先搜索,广度优先搜索,Kruskal算法最小生成树,Prime算法最小生成树,Dijkstra最短路径算法. 使用Java & S ...

  9. c语言电子地图程序,地图四色着图的C语言实现

    四色问题又称四色猜想.四色定理,是世界三大数学猜想之一.四色定理是一个著名的数学定理,通俗的说法是:每个平面地图都可以只用四种颜色来染色,而且没有两个邻接的区域颜色相同.1976年借助电子计算机证明了 ...

  10. 理论篇-地图学与GIS制图的基础理论(二)

    利用GIS技术进行地图制图,其最终目标还是需要回到地图学中去.地图学中关于地图制作的经典要求,有以下几点: 地图必须要与现实相符,符合人类的感知 这点是地图最基本的一条,地图的每一个要素展现的都是跟现 ...

最新文章

  1. 中国引领全球主导人工智能竞赛
  2. php微信扫码支付报错,(转)微信调用扫码和支付功能是都报错 the permission value is offline verifying...
  3. linux split 命令 大文件 文件 分块 分割
  4. [笔记].在Quartus II下载时,找不到USB-Blaster的一个可能原因
  5. 大志非才不就,大才非学不成—博文资源汇总
  6. 使用 Oracle Datapump API 实现数据导出
  7. docker和虚拟机的区别_详解win7操作系统下安装部署Docker环境
  8. 使用Scala,Play和Akka连接到RabbitMQ(AMQP)
  9. WPF 蒙罩层 LoadingPage
  10. 7-7 汉密尔顿回路 (25 分)(C语言实现)
  11. PostgreSQL客户端psql常用命令
  12. Guava的介绍与使用示例
  13. 使用谷歌统计来跟踪网页加载时间
  14. 油田智能化远程监控系统_油田远程无线监控系统
  15. Windows Server 2003 计划任务创建说明
  16. 网吧还原软件测试简历,测试人员-斯普林网吧客户服务系统.doc
  17. JavaScript 实例:点击漫天小星星 (获取整个浏览器窗口的宽高)
  18. 常见的手机端头部banner切换代码设置
  19. Android的Schema
  20. 将不规则时间段降雨量拆分合并到整点小时时间段

热门文章

  1. 数据库开源项目_开源项目贴纸库
  2. html使用iframe src,HTML IFrame src用法及代码示例
  3. 校园网路由器——校园网禁止使用无线路由器或者第三方代理软件共享网络解决方案(breed web控制台+老毛子(Padavan)+锐捷(Ruijie)认证+电信闪讯(NetKeeper)L2TP学校)
  4. 什么是PKI 体系(数字证书种类)
  5. 【虚拟主机】服务器搭建
  6. 备战2022软考网络管理员(1)介绍与开篇
  7. 太宰治小说《人间失格》读后感及txt、epub、mobil电子图书下载
  8. Windows XP下用Modem发送传真(ZZ)
  9. 详解win11系统的硬件最低配置要求
  10. java 金额转大写人民币