python配色方案_原来炫酷的可视化地图,用Python就能搞定!

点击上方Python全家桶星标或者置顶

重磅干货,第一时间送达

472c04232b75c8ec969268b96be3a2a7.png

对于可视化地图,?我们之前讲过Pyecharts

还有应该就是一些网站了,现成的工具,不需要敲代码。

比如下面就是用Pyecharts做的5G手机可视化地图~

12b988af545e7af6734ace4b287a5e88.png

而对于Matplotlib,目前还没有使用它绘制过地图。

所以在查阅相关资料的时候,又发现了大佬造的轮子。

Python+Selenium+Matplotlib,实现中国地图可视化。

地图数据来源于民政部,真实可靠。

项目地址:https://gitee.com/jixuanfan/Map-of-China

93a056b24458e597c516ee19a764c1c8.png

由于小F之前一直用「GitHub」保存代码,压根就没有注册「Gitee」。

而作者的代码以及相关数据是上传到「Gitee」上,需要注册下载。

不想注册那么多账号,所以查了一下在不登录情况下,能否下载项目代码。

CURL,是一个利用URL语法在命令行下工作的文件传输工具

# 在仓库地址(https://gitee.com/jixuanfan/Map-of-China)# 后面拼接/repository/archive/master.zip# 下载本例项目代码
curl -o data.zip  https://gitee.com/jixuanfan/Map-of-China/repository/archive/master.zip

Windows或许需要安装,那还是老老实实注册账号,然后下载项目代码。

Mac和Linux应该都是内置CURL,直接使用命令就行,无需安装。

/ 01 / 地图数据获取

Get_Map,基于Python爬虫,主要用到Selenium+正则。

Selenium是一个用于测试网站的自动化测试工具,这里我们主要是用它来模拟浏览器操作,进而获取地图数据。

安装教程网上都有,推荐使用谷歌浏览器,驱动文件和浏览器版本需一致。

获取地图数据的两个接口地址。

# 首页URL,获取当前所有行政区划的代码
http://xzqh.mca.gov.cn/map# 查询URL,获取国家或省市的具体地图数据
http://xzqh.mca.gov.cn/defaultQuery?

首先是获取行政区划的代码,最小应该是到县一级。

绘制不同类型的地图,所需要的数据获取函数如下。

行政代码不清楚,网上查询一下就好咯~

import Map_of_China as Map# 创建获取地图数据对象
M=Map.Get_Map()# 获取首页全国各省的地图数据
M.Get_country()# 获取一组省份内各地级行政区划的数据
M.Get_provinces([32,43])# 自动获取全国尚未获取的省份数据
M.Get_provinces_auto()# 获取一组地级市内各县级行政区划的数据
M.Get_cities([3201,3203])# 自动获取某个省尚未获取的县级行政区划数据
M.Get_cities_auto(32)# 获取全国所有县级行政区划的数据(合并在一张地图中)
M.Get_country_county()

数据主要包括形状、形状颜色、形状轮廓、文字、文字位置、标注点形状、标注点位置等。

daf23994c8afab545d5a71014b6fbb79.png

具体爬取代码、数据解析及函数的相关参数,查看Map_of_China.py文件可知。

/ 02 /  地图数据呈现

Draw_Map,基于Matplotlib绘制地图。

01. 绘制省/地级/县级行政区划的轮廓

import Map_of_China as Map# 创建获取地图数据对象
M = Map.Get_Map()# 创建绘制地图对象
D = Map.Draw_Map()# #获取首页全国各省的地图数据
M.Get_country()# 江苏地图
D.Draw_single_shape('Data/Country/320000.txt', LC=[116, 169, 221],
                                   FC=[96, 139, 219], BC='w', lw=2, title='江苏轮廓',
                                   img_path='jiansu.jpg')# 获取各省份内各地级行政区划的数据
M.Get_provinces([32])# 南京地图
D.Draw_single_shape('Data/Province/32-江苏/320100.txt', LC='k', FC=None, 
                                   title='南京轮廓', img_path='nanjing.jpg')

得到结果如下。

7b6e6bf866050f219e8b375eee368522.png bb34419287d1499c3dd3eeb31af1e2ae.png

函数可设置的参数,有线条、填充、背景颜色,以及线宽、标题、图片保存路径等。

59af65431edf9787855886cdf20240ed.png

02. 绘制全国地图

import Map_of_China as Map# 创建获取地图数据对象
M = Map.Get_Map()# 创建绘制地图对象
D = Map.Draw_Map()# 绘制全国地图
D.Draw_country(FC=True, img_path='china.jpg', arg={'provName': False,'city_name': True, 'city_pos': True, 'sea': False}, title='中国地图')

因为前面已经把全国的地图数据爬取下来,所以这里就省去了下载数据的代码。

得到结果如下。

cdc528c9077bc94017f52a47b947077c.png

配色方案,默认设置为民政部官网上的配色

6745ee180a36742a6af832328c5dbc23.png

有一些参数和轮廓图相同,不过也添加了一些新的参数。

比如南海地图位置,显示省份名称,省份名称颜色等。

03. 绘制省份地图

import Map_of_China as Map# 创建获取地图数据对象
M = Map.Get_Map()# 获取广东省份内各地级行政区划的数据
M.Get_provinces([44])# 创建绘制地图对象
D = Map.Draw_Map()# 绘制广东省地图
D.Draw_province('广东', FC=True, LC='w', arg={'other': True, 'city_pos': True, 'city_name': True},
                            img_path='guangdong.jpg')

对于省份数据,前面小F只爬取了江苏省,所以这里需要爬取广东省的地图数据才行。

得到结果如下。

2a19c5031347b329bd8756218c7355ca.png

绘制省份地图函数对应的参数有。

4e1f1cc586c70cb3f279237600f3de55.png

code可为省份的2位编码或者名称,此处设置为「广东」。

函数还包含绘制热力图的参数,data和by_val。

arg中的other设置为False时,表现不显示周围省份或城市的地图,默认参数为True,即显示。

a240cbaba7d2df6fc6da5914f49882ef.png

04. 地级行政单位地图

import Map_of_China as Map# 创建获取地图数据对象
M = Map.Get_Map()# 获取南京、深圳行政区划的数据
M.Get_cities([3201, 4403])# 创建绘制地图对象
D = Map.Draw_Map()# 南京地图(默认样式)
D.Draw_city('3201', img_path='nanjing_city.jpg')# 深圳地图(自定义样式)
D.Draw_city('深圳', FC=True, LC='w', arg={'other': True, 'city_pos': True, 'city_name': True},
                     img_path='shenzhen.jpg')

得到结果如下。

aecc41d527974f259136a95ccc6d601c.png 777375ff0c212013b6fd05789eb384f2.png

此处code为地级市的四位编码。

80491366537c64f142f27a87943c7818.png 05. 绘制热力图 将不同区域按值的大小填充不同颜色,可惜少了图例。
import Map_of_China as Map# 创建获取地图数据对象
M = Map.Get_Map()# 创建绘制地图对象
D = Map.Draw_Map()# 文件路径
src = 'Example/GDP-2018.csv'# 按数据的相对大小(排名)显示
D.Show_data(src, by_val=False, arg={'default_color': [0.6, 0.6, 0.6], 'sea': False},
                     img_path='gdp.jpg', title='2018年各省市GDP')

得到结果如下。

e5b9d1c0aa92e83f1b9202dc5b2f3ed8.png

CSV文件具体内容格式如下。

0c831435c403767dddadcebacbc30708.png

第一列为区域名称或者编码,第二列为数值。

数据处理模块在Map_of_China.py文件中。

c3c2ccab45efd3f3edff18dcbf8721eb.png

参数by_val,绝对大小和相对大小,通常应该都会选择绝对大小这种方式展示的。

就是作者的这个热力图,是没有图例的,等待更新~

# 省级数据
D.Show_data('Example/江苏人口2018.txt', '32', by_val=True, title='江苏人口2018',
            img_path='jiangsu_2018_1.jpg')# 配置地图中的样式
D.Show_data('Example/江苏人口2018.txt', '32', by_val=True, LC='w', title='江苏人口2018',
            arg={'city_name': True, 'city_pos': True, 'other': True},
            img_path='jiangsu_2018_2.jpg')

TXT格式的数据也能使用。

16579e7c26a8c7ff89d9f40a97326039.png 012271d43d7204d561115c926bcb940f.png 126b18a9f19c314aaf7ee83ee5081644.png

06. 绘制气泡图

# 气泡图
D.Bubble(src='Example/GDP-2018.csv', title='2018年各省市GDP', img_path='GDP_bubble.png')

得到结果如下。

ddc4ef0f4d943809c0ddd5d24bc0a43f.png

气泡颜色默认为黄色,可自定义参数。

c4ca3f1be522e0f385635701ce5191bd.png

发现和Pyecharts好像,相信在修改地图配色文本字体及位置后,地图会变得更好看!

往期精彩回顾

太秀了!小伙用Python表演马老师闪电五连鞭!

更快、更强的Python实现:Pyston v2.0发布

爬虫:使用 MySQL 维护 IP 代理池

一文读懂Redis常见对象类型的底层数据结构

如何利用Scrapy爬虫框架抓取网页全部文章信息(上篇)

Pandas如何处理大规模数据?原理+代码深入理解

关注公众号,回复关键

字领取对应资源

a394c7f4b9d893d2a8820caed70a6b4a.png

请把我分享给你身边更多的人

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页