Python-GeoPandas地图、专题地图绘制
Python-GeoPandas地图绘制、专题地图绘制
GeoPandas是一个开源项目,Pandas是Python的一个结构化数据分析的利器,GeoPandas扩展了pandas使用的数据类型,允许对几何类型进行空间操作,其DataFrame结构相当于GIS数据中的一张属性表,使得可以直接操作矢量数据属性表,其目标是使得在python中操作地理数据更方便。
- 矢量数据来源
可以参照我的另一篇文章,将阿里云上GeoJSON的数据利用Python保存到本地磁盘上。
- 数据地址:
http://datav.aliyun.com/tools/atlas/#&lat=31.80289258670676&lng=104.2822265625&zoom=4
- 专题地图资料搜集
可以利用统计年鉴上的数据或是其他数据制成CSV或是Excel文件,通过矢量数据的一个公共字段来连接。例如我的数据(公共字段为 name):
3.1 地图绘制
- 效果预览
- 实现代码
# -*- coding: utf-8 -*-"""
@File : provinceMapMake.py
@Author : fungis@163.com
@Time : 2020/04/20 16:49
@notice : 地图颜色(https://matplotlib.org/tutorials/colors/colormaps.html)
"""import geopandas as gpd
import matplotlib.pyplot as plt# 输入图名
Map_name = '河南省行政区划'
# 加载数据-矢量数据的位置
regions = gpd.GeoDataFrame.from_file('./shp/henanProvince/河南省.shp', encoding='utf-8')
# 加载数据-读取矢量数据的属性表
data = gpd.read_file('./shp/henanProvince/河南省.dbf', encoding='utf-8')
# 复制一份该表的数据
reg02 = data.copy()
# # 专题地图制图
reg02['coords'] = reg02['geometry'].apply(lambda x: x.representative_point().coords[0])reg02.plot(figsize=(8, 6), # 图像大小column='name', # 分级设色字段# scheme='quantiles', # MapClassify-分级类型legend=False, # 图例cmap='Pastel1_r', # 渐变色带的名称#Set2edgecolor='k') # 边框颜色
# 地图标注
for n, i in enumerate(reg02['coords']):plt.text(i[0] - 0.2, i[1], reg02['name'][n], fontsize=8, horizontalalignment="left") # 标注位置X,Y,标注内容plt.title('Python-{}图'.format(Map_name), fontsize=18, fontweight='bold')
plt.grid(True, alpha=0.5) # 显示网格,透明度为50%
# plt.show()
plt.savefig('./images/{}.png'.format(Map_name), dpi=300)
3.2专题分级设色图
- 效果预览
- 实现代码
# -*- coding: utf-8 -*-"""
@File : 河南省2018年经济发展图.py
@Author : fungis@163.com
@Time : 2020/04/20 11:29
@notice : 参照https://www.cnblogs.com/feffery/p/12381322.html
"""import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt# 加载数据-矢量数据的位置
regions = gpd.GeoDataFrame.from_file('./shp/henanProvince/河南省.shp', encoding='utf-8')# 加载已搜集的excel数据,如果是csv文件用pd.read_csv()方法
data = pd.read_excel('./data-use/henan-data.xlsx')# 处理数据格式(Excel中的name字段中有空格,消除空格)
data['area_name'] = data['name'].str.replace(' ', '')# 连接矢量数据属性表与Excel表格
reg = pd.merge(regions, data, left_on='name', right_on='area_name')
# 复制整张表
reg02 = reg.copy()
# # 专题地图制图
reg02['coords'] = reg02['geometry'].apply(lambda x: x.representative_point().coords[0])reg02.plot(figsize=(8, 6), # 图像大小column='avg_gdp_2018', # 分级设色字段scheme='quantiles', # MapClassify-分级类型legend=True, # 图例legend_kwds={"loc": "lower left"},cmap='Reds', # 渐变色带的名称edgecolor='k') # 边框颜色
# 地图标注
for n, i in enumerate(reg02['coords']):plt.text(i[0] - 0.13, i[1], reg02['area_name'][n]) # 标注位置X,Y,标注内容plt.title('2018年河南省各地级市人均GDP(单位:元)')
plt.grid(True, alpha=0.5) # 显示网格,透明度为50%
# plt.show()plt.savefig('./images/河南省2018年各地级市GDP.png', dpi=300)
- 效果预览
- 实现代码
# -*- coding: utf-8 -*-"""
@File : 经济发展组合图.py
@Author : fungis@163.com
@Time : 2020/04/20 11:29
@notice :
"""
'''
地图颜色(https://matplotlib.org/tutorials/colors/colormaps.html)
cmaps['Sequential'] = ['Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds','YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu','GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']
'''import geopandas as gpd
import pandas as pd
import matplotlib.pyplot as plt# 加载数据-矢量数据的位置
regions = gpd.GeoDataFrame.from_file('./shp/henanProvince/河南省.shp', encoding='utf-8')# 加载已搜集的excel数据,如果是csv文件用pd.read_csv()方法
data = pd.read_excel('./data-use/henan-data.xlsx')
# 处理数据格式
data['area_name'] = data['name'].str.replace(' ', '')
# 计算整合数据:人均产值= 产业产值/区域人均
data['data_one'] = data['第一产业'] / data[2018] * 10000
data['data_two'] = data['第二产业'] / data[2018] * 10000
data['data_three'] = data['第三产业'] / data[2018] * 10000
#表格链接-连接矢量数据属性表与Excel表格
reg = pd.merge(regions, data, left_on='name', right_on='area_name')
reg03 = reg.copy()
# 列表 第一个是分级设色的字段,第二个是图名
data_plot = [('avg_gdp_2018', '2018年河南省各市人均GDP(单位:元)'),('data_one', '2018年河南省各市第一产业人均产值(单位:元)'),('data_two', '2018年河南省各市第二产业人均产值(单位:元)'),('data_three', '2018年河南省各市第三产业人均产值(单位:元)')]#图纸大小设置
plt.figure(figsize=(16, 14))
for m, cal in enumerate(data_plot):reg03['coords'] = reg03['geometry'].apply(lambda x: x.representative_point().coords[0])reg03.plot(ax=plt.subplot(2, 2, m + 1),column=cal[0], # 分级设色字段scheme='Quantiles', # ['Equal_interval'|'Quantiles'|'Fisher_Jenks']legend=True,#是否显示图例legend_kwds={"loc": "lower left"},#图例的位置cmap='Pastel1', # 色带的选择edgecolor='k')for n, i in enumerate(reg03['coords']):plt.text(i[0] - 0.13, i[1], reg03['area_name'][n])plt.title(cal[1])plt.grid(True, alpha=0.5)
plt.savefig('./images/河南省2018年经济组合拼接图__Pastel1_Quantiles.png', dpi=300)
- 结尾
喜欢的朋友们可以点个关注,后续将持续更新,精彩无限^ - ^
Python-GeoPandas地图、专题地图绘制相关推荐
- python中画地图map的用法_使用basemap和python在地图中绘制海洋
您需要在您的nc_vars数据集中使用^{} 在contourf之前,插入以下内容nc_new = maskoceans(lons,lats,nc_vars[len(tmax)-1,:,:]) 然后用 ...
- 【Python】用pyecharts绘制我国人口分布和迁移地图
一直很好奇我国人口分布和迁移情况,所以想用Python分析一下.由于我国省份较多,把数据放在地图上展示会更加清晰,故本文用Python中的pyecharts库进行人口分布和迁移绘图展示. ...
- 利用Python的folium包绘制城市道路图!专业地图!
写在前面 很长一段时间内,我都在研究在线地图的开发者文档,百度地图和高德地图的开发者中心提供了丰富的在线地图服务,虽然有一定的权限限制,但不得不说,还是给我的科研工作提供了特别方便的工具,在博客前面我 ...
- python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化
文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...
- Python:地理地图folium标记物icon,圆圈,圆形,热力图,经纬度点之间的线绘制
python:地理地图folium标记物icon,圆圈,圆形,热力图,经纬度点之间的线绘制 import webbrowser as wb import folium from folium.plug ...
- python在地图上画路线_python在openstreetmap地图上绘制路线图的实现
python在openstreetmap地图上绘制路线图的实现 发布时间:2020-08-28 23:14:52 来源:脚本之家 阅读:111 作者:AAAAAAAKing 利用python进行经纬度 ...
- 【定制项目】【M14 监测预警平台】百度地图区域绘制(时间轴)/柱状图/仪表图 - 关键技术 python flask + echarts
一.项目需求 项目名称:[某监测预警平台]. 项目需求:气候数据:雨量,温湿度,PM,雷达回波,雷电预报等展示到可视化大屏. 项目工期:10个工作日. 二.项目架构 运行环境支持Windows,Lin ...
- python绘制彩色地震剖面_在地图上绘制饼图时“爆炸”楔形图(Python,matplotlib)...
所以我成功地在地图上绘制了饼图作为标记轴向散射,但我遇到了一些问题,一些楔子"爆炸"出了饼图.我似乎在我的代码中找不到原因,也无法在网上找到解释.这段代码基于示例here,一位同事 ...
- 地图上绘制任意角度的椭圆_地图上的总椭圆
地图上绘制任意角度的椭圆 或者,如何选择下班后去海滩的最佳方式 (Or, how to choose the best way to walk to the beach after work) It ...
- java echarts 散点图,echarts在地图上绘制散点图(任意点)
项目需求:在省份地图上绘制散点图,散点位置不一定是哪个城市或哪个区县,即任意点 通过查询官网文档,找到一个与需求类似的Demo:https://www.echartsjs.com/gallery/ed ...
最新文章
- Lubuntu下小巧好用的Python编辑工具Geany
- TOMCAT的域名配置
- 《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——第2章 无线生态系统 2.1无线标准化过程...
- python3.5.2使用教程_Python3.5.2-初级教程.docx
- nginx 上传 文件超时设置_nginx限制上传大小和超时时间设置说明/php限制上传大小...
- 如何在vue项目中使用sass(scss)
- c#学习总结(一)---Mr.Zhang
- MapReduce之RecordWriter理解
- 1亿中国人已被AI批改过作业
- 第一模块:开发基础 第1章 练习及作业
- 做数据分析的女孩子,职业发展在哪?数据分析枯燥吗?
- 单片机的直流电机调速控制系统
- Nginx跨域配置详解
- ecshop二次开发之电子票
- Axure下载安装汉化
- 国家信息中心副主任周民:加快形成网络安全的亮剑精神
- 7-24 猜数字游戏
- C#控件篇 - 图表控件chart - 添加辅助边界线条
- feifeicms 火车头文章采集 自动图片本地化
- 统计学:统计基本概念
热门文章
- 基于javaweb+jsp的房屋租赁管理系统(java+SSM+Layui+Maven+Mysql+Jsp)
- Origin: Piper diagram/Trilinear diagram (三线图)
- android自定义sidebar,Android仿微信通讯录列表侧边栏效果
- html嵌入word文档,网页中嵌入word文档和导出数据到word文档
- C语言 Mkl 矩阵乘法,MKL库矩阵乘法
- xUtils框架的介绍
- 2021年电工(初级)考试资料及电工(初级)考试技巧
- 计算机房精密空调术语,机房空调常用单位及计算公式
- leaflet 加载海量点位,点击marker 查看详情功能
- ubuntu freeradius mysql_初试freeradius