Python关于excel和shp的使用在matplotlib


Posted in Python onJanuary 03, 2019

关于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关于excel和shp的使用在matplotlib

Python关于excel和shp的使用在matplotlib

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python ORM框架SQLAlchemy学习笔记之关系映射实例
Jun 10 Python
使用Python抓取模板之家的CSS模板
Mar 16 Python
按日期打印Python的Tornado框架中的日志的方法
May 02 Python
Python常用库推荐
Dec 04 Python
python对列进行平移变换的方法(shift)
Jan 10 Python
Python学习笔记之视频人脸检测识别实例教程
Mar 06 Python
PyQt5实现简单数据标注工具
Mar 18 Python
pandas 如何分割字符的实现方法
Jul 29 Python
python实现最大优先队列
Aug 29 Python
面向对象学习之pygame坦克大战
Sep 11 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
Python3之乱码\xe6\x97\xa0\xe6\xb3\x95处理方式
May 11 Python
Python使用folium excel绘制point
Jan 03 #Python
Python获取航线信息并且制作成图的讲解
Jan 03 #Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 #Python
Python图像滤波处理操作示例【基于ImageFilter类】
Jan 03 #Python
python 调用有道api接口的方法
Jan 03 #Python
对python调用RPC接口的实例详解
Jan 03 #Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 #Python
You might like
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
javascript中创建对象的三种常用方法
2010/12/30 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
JavaScript实现兼容IE6的收起折叠与展开效果实例
2017/09/20 Javascript
在 Typescript 中使用可被复用的 Vue Mixin功能
2018/04/17 Javascript
vue-cli2.9.3 详细教程
2018/04/23 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[01:08:17]2018DOTA2亚洲邀请赛3月29日 小组赛B组 EG VS VGJ.T
2018/03/30 DOTA
python类继承用法实例分析
2014/10/10 Python
Python字符串中查找子串小技巧
2015/04/10 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
python编写微信公众号首图思路详解
2019/12/13 Python
keras.layer.input()用法说明
2020/06/16 Python
CSS3模拟动画下拉菜单效果
2017/04/12 HTML / CSS
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
视光学专业毕业生推荐信
2013/10/28 职场文书
党员年终民主评议的自我评价
2013/11/05 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
高中毕业自我鉴定
2013/12/19 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
关于抽烟的检讨书
2014/02/25 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
学生会生活部工作总结2015
2015/03/31 职场文书
nginx网站服务如何配置防盗链(推荐)
2021/03/31 Servers
JavaScript执行机制详细介绍
2021/12/06 Javascript