在之前的博客。python极地极地投影绘制中,我曾经提到过python cartopy在极地投影中难以添加坐标标签的问题,当时解决方法是使用文本的方式添加,但这种方式的麻烦且并不统一适用。而在之后的可视化过程,我发现python在极地投影时仍会出现一些奇怪的问题:比如,等值线扭曲,出现不规则多边形,风场分布不均匀等等。
然而,这些问题都在最新版的cartopy21中解决,因此被cartopy极地投影折磨了数月而不得不转用m_map的我得到了解脱,下面将以极地2018极地春季的10m风场为例,给大家看看效果。

安装

最新版的cartopy似乎无法通过conda upgrde与conda install的方式直接安装,但是没关系,我们直接去官网下载安装包:cartopy21.0,根据自己的python版本与系统选择即可,这里我选的是win64+py39。
下载了安装包后,进入anaconda Prompt:

conda uninstall cartopy --force#只删除cartipy,不删除cartopy依赖
conda install cartopy-0.21.0-py39h4915f10_0.tar.bz2

即可。

使用

绘制风场的代码与其他并没有区别,只是由于bug的修复,原来用于普通投影的代码可以正常使用。

import os
import matplotlib.ticker as mticker
import netCDF4 as nc
import matplotlib.path as mpath
import cmaps
import matplotlib.pyplot as plt###引入库包
import numpy as np
import matplotlib as mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from netCDF4 import Dataset
from wrf import getvar, interplevel, vertcross,vinterp, ALL_TIMES, CoordPair, xy_to_ll, ll_to_xy, to_np, get_cartopy, latlon_coords, cartopy_xlim, cartopy_ylim
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
d=nc.Dataset('F:/ERA5/met_em/use_1.nc')
u=np.array(d.variables['UU'])
v=np.array(d.variables['VV'])
os.chdir('F:/wrfout/wrfout2018/')
filepath='F:/wrfout/wrfout2018/'
file_list = os.listdir(filepath)
#数据导入
files = [os.path.join(filepath,x) for x in file_list]
wrflist=[Dataset(d) for d in file_list]
times = to_np(getvar(wrflist, "times", timeidx=ALL_TIMES))  #
lat2D = to_np(getvar(wrflist[10], "lat"  ))  # units: decimal degrees
lon2D = to_np(getvar(wrflist[10], "lon"  ))
windspeed=np.sqrt(u**2 + v**2)
#绘图
mpl.rcParams["font.family"] = 'Arial'  #默认字体类型
mpl.rcParams["mathtext.fontset"] = 'cm' #数学文字字体
mpl.rcParams["font.size"] = 12   #字体大小
mpl.rcParams["axes.linewidth"] = 1
proj =ccrs.NorthPolarStereo(central_longitude=0)#设置地图投影
#在圆柱投影中proj = ccrs.PlateCarree(central_longitude=xx)
leftlon, rightlon, lowerlat, upperlat = (-180,180,60,90)#经纬度范围img_extent = [leftlon, rightlon, lowerlat, upperlat]
fig1 = plt.figure(figsize=(12,10))#设置画布大小
f1_ax1 = fig1.add_axes([0.2, 0.3, 0.5, 0.5],projection = ccrs.NorthPolarStereo(central_longitude=0))#绘制地图位置
#注意此处添加了projection = ccrs.NorthPolarStereo(),指明该axes为北半球极地投影
f1_ax1.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,linewidth=1, color='grey',linestyle='--')
f1_ax1.set_extent(img_extent, ccrs.PlateCarree())
f1_ax1.add_feature(cfeature.COASTLINE.with_scale('110m'))
theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.5
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)
f1_ax1.set_boundary(circle, transform=f1_ax1.transAxes)
quiver = f1_ax1.quiver(lon2D, lat2D, musp, mvsp,windspeed, pivot='tail',width=0.002, scale=50, cmap=plt.cm.jet, headwidth=4,regrid_shape=35,alpha=1,transform=ccrs.PlateCarree())
f1_ax1.quiverkey(quiver, 0.91, 1.03, 3, "3m/s",labelpos='E', coordinates='axes', fontproperties={'size': 10,'family':'Times New Roman'})
plt.show()

可以看出并无不同,唯一值得一提的是regrid_shape选项,它可以帮助我们绘制风场时不那么密集。
效果:

可以看出比之前的bug都有所修复。

python绘制极地投影/cartopy20.0+解决python极地投影问题/python nc可视化——以北极10m风场为例相关推荐

  1. python 绘制世界地图,添加海岸线、陆地、投影

    python 绘制世界地图,添加海岸线.陆地.投影等 tips:最近在学习python的模块:matplotlib 为画全球的要素分布做准备 在此之前,先学习一下如何绘制世界地图,以及一些投影的使用. ...

  2. python下载安装教程-一招解决:各种版本的Python下载安装教程

    原标题:一招解决:各种版本的Python下载安装教程 python从17年开始大火,自然想学python的同学就多了,小编整理了这篇文章,从python的功能介绍.各系统最新版本python下载.py ...

  3. python绘制四边螺旋线代_解决python彩色螺旋线绘制引发的问题

    彩色螺旋线的绘制代码如下: import turtle import time turtle.pensize(2) turtle.bgcolor('black') colors = ['red', ' ...

  4. python设置一个初始为0的计数器_如何为python列表的每个元素实现一个计数器?...

    使用 Python 3.4 我有一种方法可行,但我认为可能有更好的方法. 我希望有一个方法expand()的列表,它从列表中选择一个随机元素,但每次选择该元素时,计数器都会递增.我尝试继承str以便能 ...

  5. python绘制折线图显示数据_漂亮图表也可用python信手拈来!一文教你学会用Python绘制堆积折线图...

    今天,和大家聊聊关于Python绘图相关的东东哦,还是和大家继续深耕Python经典的matplotlib库哦! 好啦,咱们就开始吧! 首先,咱们聊聊如何在Python中去绘制经典的堆积折线图 到这可 ...

  6. python绘制图形沙漏_sandglass(沙漏)——一个让人解脱的python时间处理库

    2014年六一儿童节那天的时间戳是多少? 2014年六一儿童节那天是星期几? datetime对象转成字符串后面往往带小数点,即微秒,而我存到数据库是不需要微秒的,怎么搞? 从配置中读取.网络中传输. ...

  7. python绘制函数曲线x2sin(x2-x-2)_Python数据处理从零开始----第四章(可视化)(2)图形和轴...

    正文 导入包 当我们需要对数据进行可视化时,我们遇到的可能最简单的是单个函数的可视化y = f(x)y = f(x). 在这里,我们将首先看一下这种类型的简单绘图.第一步先导入包:% reset -f ...

  8. python绘制表情包笑脸_用micro:bit学Python ——阵列显示表情符号“笑脸跳动的心”...

    本节任务要求 使用Microbit LED阵列显示表情符号 "笑脸跳动的心" 题目分析 这是一个使用Python语言完成MicroBit板载LED阵列编程的入门进阶题目,属于入门阶 ...

  9. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

最新文章

  1. 0218互联网新闻 | 《流浪地球》IMAX中国票房破3亿;苹果发力智能家居
  2. Linux 中的进程管理
  3. 稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示
  4. Hot Door CADtools (基础篇)
  5. python自动化_Python 实现Excel自动化办公上
  6. C#程序设计语言2.0简介
  7. fenby C语言 P11
  8. cmd换行 windows_键盘键位修改及管理(Windows篇)
  9. 程设课终章:c++使用socket实现bmp图片的传输
  10. 非计算机专业,如何学习计算机视觉
  11. java.lang.NoClassDefFoundError: Could not initialize class com.cyj.util.Jdbc
  12. 笔记本方向键和HOME END 键是 同一个按钮,怎么使用?
  13. Python Selenium 疑难杂症解方(四):上传文件
  14. resample按时间聚合
  15. python命令输入if_SPSS中Recode、Compute、Count、If命令
  16. 左右滑屏设置_android手势滑屏及左右滑屏
  17. DT(Detect to Track and Track to Detect)论文详读
  18. 计算机考试的知识要记忆背,2017计算机等级考试(NCRE)备考小技巧
  19. 使用Opencv2+Pyqt5实现人脸识别视频马赛克
  20. 解决第三方平台超时问题

热门文章

  1. git 终端命令行工具(忽略大小写,很好用)
  2. IT外企那点儿事(2):多种多样的外企
  3. 太有用了,自己有电脑的不看后悔一辈子
  4. animate.css、gsap
  5. 阿里云、腾讯云、百度云、京东云、华为云、盛大云、ucloud等云平台各自的优势是什么?
  6. 插入式超声波水表和插入式电磁水表的简单对比
  7. 通过PowerShell启用AADC的密码同步功能
  8. 压缩解压工具A-Zippr for Mac
  9. 自媒体一篇文章能多平台发布吗?
  10. 几种Jsp连接数据库方法!