python Cartopy的基础使用详解


Posted in Python onNovember 01, 2020

前言

常用地图底图的绘制一般由Basemap或者cartopy模块完成,由于Basemap库是基于python2开发的一个模块,目前已经不开发维护。故简单介绍cartopy模块的一些基础操作。 一、基础介绍

首先导入相关模块。

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter

首先介绍参数projection,该命令可以配合ccrs设置投影类型,此处以方形投影命令为示例。其中central_longitude参数为投影中心位置。其中心设置与Basemap设置规则一样,详情可以看上一篇文章。

ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=0))

在设置好绘制类型后,绘制地图各特征量。其代码如下:

#ax.add_feature(cfeature.LAKES.with_scale(scale))
ax.add_feature(cfeature.OCEAN.with_scale(scale))
#ax.add_feature(cfeature.RIVERS.with_scale(scale))
#ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)

参数scale为地图分辨率,目前支持10m,50m,110m,参数lw为线条粗细。此处绘制海岸线和海洋,效果图如下:

python Cartopy的基础使用详解

在绘制结束后,作为地图。经纬度自然是必不可少的,在该模块中,引进同时设置坐标轴标签改变该标签刻度的表示,具体形式如下:

ax.set_xticks(np.arange(0,361,40), crs=ccrs.PlateCarree())
ax.set_yticks(np.arange(-90,90+30,30), crs=ccrs.PlateCarree())
#zero_direction_label用来设置经度的0度加不加E和W
lon_formatter = LongitudeFormatter(zero_direction_label=False)
lat_formatter = LatitudeFormatter()
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)

可以看到效果图如下:

python Cartopy的基础使用详解

当然如果想对坐标轴粗细变化可以引入一下命令。

ax.outline_patch.set_visible(False)
ax.spines['bottom'].set_visible(True)
ax.spines['left'].set_visible(True)
ax.spines['right'].set_visible(True)
ax.spines['top'].set_visible(True)
ax.spines['bottom'].set_linewidth(2.5);###设置底部坐标轴的粗细
ax.spines['left'].set_linewidth(2.5);####设置左边坐标轴的粗细
ax.spines['right'].set_linewidth(2.5);###设置右边坐标轴的粗细
ax.spines['top'].set_linewidth(2.5);####设置上部坐标轴的粗细

应该在该模块下,控制坐标轴的命令已经和常规不一样。因此先关闭该控制,然后开启常规坐标轴设置。

二、区域地图的绘制

当我们在某一小块区域研究时,需要绘制区域地图。此时我们可以引入命令:

ax.set_extent(box,crs=ccrs.PlateCarree())

其中box为绘制区域,crs为投影类型。其他命令基本不变。设置box为[40,180,0,90],可得到效果图如下:

python Cartopy的基础使用详解

总结

为方便各位读者,我书写了绘制地图的函数,大家在使用时可直接调用。此处示例为方形投影,若希望绘制其他投影。只需要修改函数部分参数即可。代码如下:

def map_make(scale,box,xstep,ystep):
  ax=plt.axes(projection=ccrs.PlateCarree(central_longitude=180))
  a = (box[1]-box[0])//xstep
  x_start = box[1] - a*xstep
  a = (box[3]-box[2])//ystep
  y_start = box[3] - a*ystep
  ax.set_extent(box,crs=ccrs.PlateCarree())
  #ax.add_feature(cfeature.LAKES.with_scale(scale))
  #ax.add_feature(cfeature.OCEAN.with_scale(scale))
  #ax.add_feature(cfeature.RIVERS.with_scale(scale))
  #ax.add_feature(cfeature.LAND.with_scale(scale),lw=0.5)
  ax.add_feature(cfeature.COASTLINE.with_scale(scale),lw=2)
  
  ax.set_xticks(np.arange(x_start,box[1]+xstep,xstep), crs=ccrs.PlateCarree())
  ax.set_yticks(np.arange(y_start,box[3]+ystep,ystep), crs=ccrs.PlateCarree())
  #zero_direction_label用来设置经度的0度加不加E和W
  lon_formatter = LongitudeFormatter(zero_direction_label=False)
  lat_formatter = LatitudeFormatter()
  ax.xaxis.set_major_formatter(lon_formatter)
  ax.yaxis.set_major_formatter(lat_formatter)
  #添加网格线
  ax.grid()
  
  ax.outline_patch.set_visible(False)
  ax.spines['bottom'].set_visible(True)
  ax.spines['left'].set_visible(True)
  ax.spines['right'].set_visible(True)
  ax.spines['top'].set_visible(True)
  ax.spines['bottom'].set_linewidth(2.5);###设置底部坐标轴的粗细
  ax.spines['left'].set_linewidth(2.5);####设置左边坐标轴的粗细
  ax.spines['right'].set_linewidth(2.5);###设置右边坐标轴的粗细
  ax.spines['top'].set_linewidth(2.5);####设置上部坐标轴的粗细
  
  return ax

到此这篇关于python Cartopy的基础使用详解的文章就介绍到这了,更多相关python Cartopy内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python heapq使用详解及实例代码
Jan 25 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
使用python实现tcp自动重连
Jul 02 Python
详解Golang 与python中的字符串反转
Jul 21 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
Python标准库shutil用法实例详解
Aug 13 Python
python可视化实现代码
Jan 15 Python
pandas实现将日期转换成timestamp
Dec 07 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
自学python用什么系统好
Jun 23 Python
Python中使用aiohttp模拟服务器出现错误问题及解决方法
Oct 31 #Python
关于python中导入文件到list的问题
Oct 31 #Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 #Python
Python在线和离线安装第三方库的方法
Oct 31 #Python
python安装第三方库如xlrd的方法
Oct 31 #Python
python 中关于pycharm选择运行环境的问题
Oct 31 #Python
python操作ini类型配置文件的实例教程
Oct 30 #Python
You might like
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
PHP session 会话处理函数
2016/06/06 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
理解JSON:3分钟课程
2011/10/28 Javascript
jquery常用操作小结
2014/07/21 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
2015/07/06 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
node.js遍历目录的方法示例
2018/08/01 Javascript
创建Vue项目以及引入Iview的方法示例
2018/12/03 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Python将文本去空格并保存到txt文件中的实例
2018/07/24 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
python实现tail实时查看服务器日志示例
2019/12/24 Python
python 已知一个字符,在一个list中找出近似值或相似值实现模糊匹配
2020/02/29 Python
python 安装移动复制第三方库操作
2020/07/13 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
安全教育演讲稿
2014/05/09 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
结婚主持人致辞
2015/07/28 职场文书
心理学培训心得体会
2016/01/22 职场文书
详解NodeJS模块化
2021/06/15 NodeJs