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网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
常见的在Python中实现单例模式的三种方法
Apr 08 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python中kmeans聚类实现代码
Feb 23 Python
详解Python中的四种队列
May 21 Python
python实现多人聊天室
Mar 31 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
python计算导数并绘图的实例
Feb 29 Python
Python中Permission denied的解决方案
Apr 02 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
PHP原生函数一定好吗?
2014/12/08 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
thinkphp5框架实现的自定义扩展类操作示例
2019/05/16 PHP
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
2015/10/20 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
javascript基于原型链的继承及call和apply函数用法分析
2016/12/15 Javascript
nodejs根据ip数组在百度地图中进行定位
2017/03/06 NodeJs
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
AngularJS折叠菜单实现方法示例
2017/05/18 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
2020/05/13 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[20:39]DOTA2-DPC中国联赛 正赛开幕式 1月18日
2021/03/11 DOTA
python实现问号表达式(?)的方法
2013/11/27 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
目前最全的python的就业方向
2018/06/05 Python
Python定时任务sched模块用法示例
2018/07/16 Python
浅谈django orm 优化
2018/08/18 Python
Python 一句话生成字母表的方法
2019/01/02 Python
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
《梅花魂》教学反思
2014/04/30 职场文书
写求职信有哪些注意事项
2014/05/08 职场文书
员工团队活动方案
2014/08/28 职场文书
党员批评与自我批评
2014/10/15 职场文书
2014年学校体育工作总结
2014/12/08 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
行政复议答复书
2015/07/01 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python
HTML实现仿Windows桌面主题特效的实现
2022/06/28 HTML / CSS