Python關(guān)于excel和shp的使用在matplotlib
關(guān)于excel和shp的使用在matplotlib
- 使用pandas 對(duì)excel進(jìn)行簡(jiǎ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]) # 計(jì)數(shù)工具
# print(data.sort_values('觀測(cè)場(chǎng)拔海高度(米)',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ù) 州:國(guó)家
# 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é)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
pytorch如何凍結(jié)某層參數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了pytorch如何凍結(jié)某層參數(shù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn)
Python Flask 框架是一個(gè)輕量級(jí)的 Web 框架,它簡(jiǎn)單易用,靈活多變,非常適合用于構(gòu)建小型到中型規(guī)模的 Web 應(yīng)用程序,本文給大家介紹了Python使用flask作為web服務(wù)器的代碼實(shí)現(xiàn),需要的朋友可以參考下2024-06-06
基于python實(shí)現(xiàn)地址和經(jīng)緯度轉(zhuǎn)換
這篇文章主要介紹了基于python實(shí)現(xiàn)地址和經(jīng)緯度轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
python 實(shí)現(xiàn)turtle畫圖并導(dǎo)出圖片格式的文件
今天小編就為大家分享一篇python 實(shí)現(xiàn)turtle畫圖并導(dǎo)出圖片格式的文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2019-12-12
python使用turtle庫(kù)與random庫(kù)繪制雪花
這篇文章主要為大家詳細(xì)介紹了python使用turtle庫(kù)與random庫(kù)繪制雪花,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
在Python中輸入一個(gè)以空格為間隔的數(shù)組方法
今天小編就為大家分享一篇在Python中輸入一個(gè)以空格為間隔的數(shù)組方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2018-11-11
python lambda函數(shù)及三個(gè)常用的高階函數(shù)
這篇文章主要介紹了python lambda函數(shù)及三個(gè)常用的高階函數(shù),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02

