Python關(guān)于excel和shp的使用在matplotlib
更新時間:2019年01月03日 11:29:54 作者:staHuri
今天小編就為大家分享一篇關(guān)于Python關(guān)于excel和shp的使用在matplotlib,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
關(guān)于excel和shp的使用在matplotlib
- 使用pandas 對excel進(jìn)行簡單操作
- 使用cartopy 讀取shpfile 展示到matplotlib中
- 利用shpfile文件中的一些字段進(jìn)行一些著色處理
#!/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):
"""
根據(jù)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):
"""
度分轉(zhuǎn)換成十進(jìn)制
: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]) # 計數(shù)工具
# print(data.sort_values('觀測場拔海高度(米)',ascending=False).head(10))# 根據(jù)值排序
# 判斷經(jīng)緯度是什么格式(度分 、 十進(jìn)制) 判斷依據(jù) %0.2f 是否大于60
# print(data['經(jīng)度'].apply(lambda x:x-int(x)).sort_values(ascending=False).head()) # 結(jié)果判斷為度分保存
# 坐標(biāo)處理
data['經(jīng)度'] = data['經(jīng)度'].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['經(jīng)度'], data['緯度'], s=0.3, c='g')
# shp = shaperead.Reader('ne_10m_admin_0_countries/ne_10m_admin_0_countries.shp')
# # 抽取函數(shù) 州:國家
# 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坐標(biāo)標(biāo)注
ax.set_yticks([35, 45, 55], crs=ccrs.PlateCarree()) # y 坐標(biāo)標(biāo)注
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()


總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Python數(shù)據(jù)分析?Pandas?Series對象操作
這篇文章主要介紹了Python數(shù)據(jù)分析之Pandas?Series對象,文章基于python的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
Python numpy實(shí)現(xiàn)二維數(shù)組和一維數(shù)組拼接的方法
今天小編就為大家分享一篇Python numpy實(shí)現(xiàn)二維數(shù)組和一維數(shù)組拼接的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
python解析mdf或mf4文件利器之a(chǎn)sammdf用法
這篇文章主要介紹了python解析mdf或mf4文件利器之a(chǎn)sammdf用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
Python文件夾與文件的操作實(shí)現(xiàn)代碼
最近在寫的程序頻繁地與文件操作打交道,這塊比較弱,還好在百度上找到一篇不錯的文章,這是原文傳送門,我對原文稍做了些改動2014-07-07
Python標(biāo)準(zhǔn)庫json模塊和pickle模塊使用詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫json模塊和pickle模塊使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03

