Python开发工程师在各大企业中备受重视,因此参加Python培训学习的小伙伴越来越多,本篇文章小编和大家分享一下Python关于excel和shp的使用在matplotlib,小编觉得内容不错,现在分享给大家,希望对小伙伴有参考价值,下面就随小编一起来了解一下吧。
Python培训关于excel和shp的使用在matplotlib:
使用pandas 对excel进行简单操作
使用cartopy 读取shpfile 展示到matplotlib中
利用shpfile文件中的一些字段进行一些着色处理
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @File : map02.py
# @Author: huifer
# @Date : 2018/6/28
import folium
import pandas as pd
import requests
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import zipfile
import cartopy.io.shapereader as shaperead
from matplotlib import cm
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
import os
dataurl = "http://image.data.cma.cn/static/doc/A/A.0012.0001/SURF_CHN_MUL_HOR_STATION.xlsx"
shpurl = "http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_admin_0_countries.zip"
def download_file(url):
"""
根据url下载文件
:param url: str
"""
r = requests.get(url, allow_redirects=True)
try:
open(url.split('/')[-1], 'wb').write(r.content)
except Exception as e:
print(e)
def degree_conversion_decimal(x):
"""
度分转换成十进制
:param x: float
:return: integer float
"""
integer = int(x)
integer = integer + (x - integer) * 1.66666667
return integer
def unzip(zip_path, out_path):
"""
解压zip
:param zip_path:str
:param out_path: str
:return:
"""
zip_ref = zipfile.ZipFile(zip_path, 'r')
zip_ref.extractall(out_path)
zip_ref.close()
def get_record(shp, key, value):
countries = shp.records()
result = [country for country in countries if country.attributes[key] == value]
countries = shp.records()
return result
def read_excel(path):
data = pd.read_excel(path)
# print(data.head(10)) # 获取几行
# print(data.ix[data['省份']=='浙江',:].shape[0]) # 计数工具
# print(data.sort_values('观测场拔海高度(米)',ascending=False).head(10))# 根据值排序
# 判断经纬度是什么格式(度分 、 十进制) 判断依据 %0.2f 是否大于60
# print(data['经度'].apply(lambda x:x-int(x)).sort_values(ascending=False).head()) # 结果判断为度分保存
# 坐标处理
data['经度'] = data['经度'].apply(degree_conversion_decimal)
data['纬度'] = data['纬度'].apply(degree_conversion_decimal)
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([70, 140, 15, 55])
ax.stock_img()
ax.scatter(data['经度'], data['纬度'], s=0.3, c='g')
# shp = shaperead.Reader('ne_10m_admin_0_countries/ne_10m_admin_0_countries.shp')
# # 抽取函数 州:国家
# city_list = [country for country in countries if country.attributes['ADMIN'] == 'China']
# countries = shp.records()
plt.savefig('test.png')
plt.show()
def gdp(shp_path):
"""
GDP 着色图
:return:
"""
shp = shaperead.Reader(shp_path)
cas = get_record(shp, 'SUBREGION', 'Central Asia')
gdp = [r.attributes['GDP_MD_EST'] for r in cas]
gdp_min = min(gdp)
gdp_max = max(gdp)
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([45, 90, 35, 55])
for r in cas:
color = cm.Greens((r.attributes['GDP_MD_EST'] - gdp_min) / (gdp_max - gdp_min))
ax.add_geometries(r.geometry, ccrs.PlateCarree(),
facecolor=color, edgecolor='black', linewidth=0.5)
ax.text(r.geometry.centroid.x, r.geometry.centroid.y, r.attributes['ADMIN'],
horizontalalignment='center',
verticalalignment='center',
transform=ccrs.Geodetic())
ax.set_xticks([45, 55, 65, 75, 85], crs=ccrs.PlateCarree()) # x坐标标注
ax.set_yticks([35, 45, 55], crs=ccrs.PlateCarree()) # y 坐标标注
lon_formatter = LongitudeFormatter(zero_direction_label=True)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)
plt.title('GDP TEST')
plt.savefig("gdb.png")
plt.show()
def run_excel():
if os.path.exists("SURF_CHN_MUL_HOR_STATION.xlsx"):
read_excel("SURF_CHN_MUL_HOR_STATION.xlsx")
else:
download_file(dataurl)
read_excel("SURF_CHN_MUL_HOR_STATION.xlsx")
def run_shp():
if os.path.exists("ne_10m_admin_0_countries"):
gdp("ne_10m_admin_0_countries/ne_10m_admin_0_countries.shp")
else:
download_file(shpurl)
unzip('ne_10m_admin_0_countries.zip', "ne_10m_admin_0_countries")
gdp("ne_10m_admin_0_countries/ne_10m_admin_0_countries.shp")
if __name__ == '__main__':
# download_file(dataurl)
# download_file(shpurl)
# cas = get_record('SUBREGION', 'Central Asia')
# print([r.attributes['ADMIN'] for r in cas])
# read_excel('SURF_CHN_MUL_HOR_STATION.xlsx')
# gdp()
run_excel()
run_shp()
最后想要了解更多关于Python开发方面内容的小伙伴,请关注扣丁学堂Python培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的Python开发环境搭建视频,Python培训后的前景无限,行业薪资和未来的发展会越来越好的,扣丁学堂老师精心推出的Python视频直播课定能让你快速掌握Python从入门到精通开发实战技能。
网友评论