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实现连接mongodb的方法
May 08 Python
Python利用operator模块实现对象的多级排序详解
May 09 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
pygame游戏之旅 添加碰撞效果的方法
Nov 20 Python
详解python中sort排序使用
Mar 23 Python
python 实现在tkinter中动态显示label图片的方法
Jun 13 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 Python
django序列化serializers过程解析
Dec 14 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
python如何获取网络数据
Apr 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
回答PHPCHINA上的几个问题:URL映射
2007/02/14 PHP
PHP模块 Memcached功能多于Memcache
2011/06/14 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP实现的简单网络硬盘
2015/07/29 PHP
windows平台中配置nginx+php环境
2015/12/06 PHP
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
2016/09/22 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
JavaScript中localStorage对象存储方式实例分析
2017/01/12 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
js实现左右两侧浮动广告
2018/07/09 Javascript
原生js检测页面加载完毕的实例
2018/09/11 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
python基础教程之缩进介绍
2014/08/29 Python
python搭建微信公众平台
2016/02/09 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Empty test suite.(PyCharm程序运行错误的解决方法)
2018/11/30 Python
python opencv实现图像边缘检测
2019/04/29 Python
python实现多线程端口扫描
2019/08/31 Python
通过Turtle库在Python中绘制一个鼠年福鼠
2020/02/03 Python
Django REST framwork的权限验证实例
2020/04/02 Python
python要安装在哪个盘
2020/06/15 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
中软Java笔试题
2012/11/11 面试题
小学体育教学反思
2014/01/31 职场文书
党员岗位承诺书
2014/03/25 职场文书
道路施工安全责任书
2014/07/24 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
九寨沟导游词
2015/02/02 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
教你nginx跳转配置的四种方式
2022/07/07 Servers