附近培训python

Python开发工程师在各大企业中备受重视,因此参加Python培训学习的小伙伴越来越多,本篇文章小编和大家分享一下Python关于excel和shp的使用在matplotlib,小编觉得内容不错,现在分享给大家,希望对小伙伴有参考价值,下面就随小编一起来了解一下吧。

关于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]

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.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)

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")

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()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值