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中的jquery PyQuery库使用小结
May 13 Python
Python实现拼接多张图片的方法
Dec 01 Python
Python导入txt数据到mysql的方法
Apr 08 Python
详解Python3中的Sequence type的使用
Aug 01 Python
Python3连接MySQL(pymysql)模拟转账实现代码
May 24 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
python实现简单http服务器功能
Sep 17 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
利用Python实现学生信息管理系统的完整实例
Dec 30 Python
全网非常详细的pytest配置文件
Jul 15 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英文字母大小写转换函数小结
2014/05/03 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
less简单入门(CSS 预处理语言)
2017/03/08 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
基于JavaScript实现每日签到打卡轨迹功能
2018/11/29 Javascript
Vuex中的Mutations的具体使用方法
2020/06/01 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
python操作CouchDB的方法
2014/10/08 Python
Python调用命令行进度条的方法
2015/05/05 Python
python基础教程之Filter使用方法
2017/01/17 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
用Python将mysql数据导出成json的方法
2018/08/21 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
python实现求特征选择的信息增益
2018/12/18 Python
python实现美团订单推送到测试环境,提供便利操作示例
2019/08/09 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
Pytorch在NLP中的简单应用详解
2020/01/08 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
Fossil加拿大官网:化石手表、手袋、首饰及配饰
2019/04/23 全球购物
暑期社会实践学生的自我评价
2014/01/09 职场文书
列车长先进事迹材料
2014/01/25 职场文书
产品设计开发计划书
2014/05/07 职场文书
全运会口号
2014/06/20 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
小时代观后感
2015/06/10 职场文书
最新的离婚协议书范本!
2019/07/02 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
Win11 Build 21996.1 Dev版怎么样? win11系统截图欣赏
2021/11/21 数码科技