前天讲了用PyQt5实现数据可视化,也已经基本讲完整个项目了,没有看之前文章或者今天才关注的可以看一下历史消息或者点击这里:

​遗传算法可视化项目(1):概述​

​遗传算法可视化项目(2):获取信息​

​遗传算法可视化项目(3):创建图的数据结构​

​遗传算法可视化项目(插曲):关于距离的计算​

​遗传算法可视化项目(4):遗传算法​

​遗传算法可视化项目(5):C语言和Python交互​

​遗传算法可视化项目(6):用PyQt5实现数据可视化​

然而我的运行结果是有地图的,这个地图不是网上找的,而是我用Python画上去的,画地图首先需要装一下相关库,我之前装的时候pip没用,现在不清楚了,我就讲一下我之前怎么装的啦!

先进入Python非官方库网站:http://www.lfd.uci.edu/~gohlke/pythonlibs,然后就是找相关库basemap,Ctrl+F输入basemap搜索找到这里:

遗传算法可视化项目(7):地图装饰_数据

点击对应的版本下载,因为我是Python3.6 64位,所以要下载3.6 64位的版本,也就是这个:basemap-1.1.0-cp36-cp36m-win_amd64.whl,上面说还需要pyproj库,也是搜索找到这里:

遗传算法可视化项目(7):地图装饰_遗传算法_02

点击对应版本下载就行了,然后就是pip安装两个轮子文件,命令一定要写成这样:

pip install pyproj-1.9.5.1-cp36-cp36m-win_amd64.whl

pip install basemap-1.1.0-cp36-cp36m-win_amd64.whl

先装pyproj再装basemap,写全文件名,命令行工作目录切换到轮子文件所在的目录,才能安装成功!

库安装成功还是不能画地图,还要去这里:https://gadm.org/download_country_v3.html,下载数据文件,country选择China,然后点击shapefile进行下载:


下载好了之后解压到任意文件夹内,我这里就解压到一个名叫map的文件夹,然后我就在map文件夹所在目录新建一个Python文件(我就叫:海南地图.py了),到时候读取map文件夹内的文件代码只需要写成map/(...)(使用相对路径),没有必要写成C:\(...)(使用绝对路径)。接下来就是编写那个py文件了,代码如下:

遗传算法可视化项目(7):地图装饰_数据_03

第一二两行是导入开发包,没什么好说的,第三行虽然是注释,但还是很重要,因为画地图需要用到这个注释里的东西,接下来就是画地图了,plt.figure函数是定义尺寸,两个默认参数,第一个默认参数figsize=(x,y),x表示图片的宽,y表示图片的高,单位都是英寸,dpi是用来控制图片大小的(默认值我忘了

遗传算法可视化项目(7):地图装饰_python_04

),dpi越大画出来的图就越大!然后就是用Bsemap类的构造方法创建一个地图对象,传入四个参数llcrnrlon:最小经度,llcrnrlat:最小纬度,urcrnrlon:最大经度,urcrnrlat:最大纬度,然后就是对象调用readshapefile方法读取图形文件的数据,这个方法有三个参数:第一个参数是读取的图形文件的文件名,第二个参数是用来表示内部的边界,在这里就是市的边界,第三个参数是用来控制要不要画边界,这里必须是True,不画边界地图都不显示。地图最后画出来是这样:

遗传算法可视化项目(7):地图装饰_python_05

然后就是点击那个保存按钮保存图片,然后使用画图工具(开始菜单搜索输入paint就能够找到)打开保存的图片,如图所示:

遗传算法可视化项目(7):地图装饰_python_06

然后点击主页→旋转→垂直翻转,然后保存翻转之后的图片,为什么要翻转因为原本的图它坐标是左下角为原点,向右x轴正方向,向上y轴正方向;而PyQt5是左上角为原点,向右x轴正方向,向下y轴正方向。然后就是复制图片到main.py目录下,接着就是修改main.py了。需要修改的部分大家自己对照之前的改一下就行,首先开发包要多导入一个QPixmap类,代码如下:

遗传算法可视化项目(7):地图装饰_数据_07

接着构造方法和init_ui方法不要动,需要修改一下绘画事件方法,给这个方法加一个插入图片的方法的调用,代码如下:

遗传算法可视化项目(7):地图装饰_遗传算法_08

一定要先插入图片,再画点和线,不然画出来的点和线会被图遮掉,插入图片insert_png方法实现如下:

遗传算法可视化项目(7):地图装饰_遗传算法_09

第一步设置抗锯齿,第二步设置笔的类型,这里是没有笔,下面两个注释是我从外面拿到的数据,两三句话也讲不清这数据是什么,怎么弄到的,貌似我也有一些遗忘了

遗传算法可视化项目(7):地图装饰_python_04

,我也只能简单的说是控制图片位置和大小用到的数据,想要知道具体情况的可以加群(Q群群号:822163725,备注:小陈学Python),最后一步就是把图画上去,总共5个参数,前两个参数是左上角位置,第三第四两个参数是右下角位置,然后就是传入一个图片对象(在这里我用的是匿名对象,用一次就没,反正也只要用一次),然后看上去应该差不多了,但是还需要把之前画的点往左偏移一点才能保证点都在岛内,跑到海里去可不好

遗传算法可视化项目(7):地图装饰_python_04

!偏移修改draw_points方法即可,代码如下:

遗传算法可视化项目(7):地图装饰_数据_12

对应的画线方法的代码也要修改,修改后代码如下:

遗传算法可视化项目(7):地图装饰_遗传算法_13

然后就是运行了,运行结果:

遗传算法可视化项目(7):地图装饰_数据_14

目前为止,遗传算法可视化项目已经全部结束,以后我都会尽量讲解基础知识,但是有项目还是会讲项目的,文章最后附上项目地址:​https://github.com/3480430977/DataVisualizationOfGA

最后欢迎大家扫码关注


遗传算法可视化项目(7):地图装饰_遗传算法_15