【ProPlot库(二)】 动手画你的第一个气象图

学习气象少不了与等值线 (contour line; isoline) 打交道。proplot 以 matplotlib、cartopy 包作为基础,可使用 matplotlib 中的方法来绘制等值线图。下面介绍一个简单的绘制气温的例子:

首先在 jupyter notebook 上用 xarray 读取气象数据。xarray 的安装可见【基础知识】为python部署第三方库(设备可联网版)

#xarray官网:http://xarray.pydata.org/en/stable/
import xarray as xr
import proplot as plot
ds=xr.open_dataset('data/83.nc')
ds

在 jupyter 界面会出现如下内容,变量主要有PS、T、U、V等。想查看变量 T,可以用ds.T 和ds.T.dims,发现变量T的维度包含("time","lev","lat","lon")。

要想将变量T在地图上呈现出来,就需要固定前两个维度 "time" 和 "lev" 。选择第一个时刻和最后一个高度层,在 jupyter 中查看ds.T[0,-1] 的内容。

接下来可以用 ds.T[0,-1].plot() 来快速出图。

如果要画等值线,则可使用 ds.T[0,-1].plot.contourf(),或者使用 proplot 的 PlotAxes.contourf。两种方法都可以,采用 xarray 自带的 plot 方法很便捷,利用 cmap 改变颜色条,levels 来改变 contours 的间隔,ax.colorbar() 添加颜色条的标注。

fig,axes=plot.subplots(proj='cyl',ncols=2)
fig.format(coast=True,labels=True)

ax=axes[0]
ds.T[0,-1].plot.contourf(ax=ax,levels=10,globe=True) #xarray 自带
ax.format(title='xarray contourf plot')

ax=axes[1]
m=ax.contourf(ds.T[0,-1],globe=True,cmap='viridis',levels=10)
ax.colorbar(m)
ax.format(title='proplot contourf plot')

接下来绘制 temperature 的水平分布。在上期代码的基础上(【ProPlot库】初识ProPlot(一)),只需要再添加几行代码和参数,便可以画出比较美观的全球范围气温的等值线图。

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

fig,axs = pplt.subplots(refheight=4,refwidth=5, proj='cyl')
axs.format(grid=False,metalinewidth=2,coast=True,reso='med',coastlinewidth=0.35)

ax=axs[0]
extent = [-180,180,-90, 90] # Contiguous US bounds

ax.set_xticks(np.linspace(extent[0],extent[1],7),crs=ccrs.PlateCarree()) # set longitude indicators
ax.set_yticks([-60, -30, 0, 30, 60], crs=ccrs.PlateCarree())
lon_formatter = LongitudeFormatter(zero_direction_label=True,number_format='.0f')#,degree_symbol='')
lat_formatter = LatitudeFormatter(number_format='.0f')#,degree_symbol='')
ax.xaxis.set_major_formatter(lon_formatter)
ax.yaxis.set_major_formatter(lat_formatter)

ax.xaxis.set_tick_params(labelsize=15, pad=10)
ax.yaxis.set_tick_params(labelsize=15, pad=10)

ax.xaxis.set_minor_locator(plt.MultipleLocator(10))
ax.xaxis.set_major_locator(plt.MultipleLocator(60))
ax.yaxis.set_minor_locator(plt.MultipleLocator(10))

ax.tick_params(which='minor',direction='out',length=5,width=0.8,top='on',                bottom='on', 
                left='on',
                right='on', )

ax.tick_params(which='major',direction='out', length=10, width=1.5, colors='k',
              top='on', 
                bottom='on', 
                left='on',
                right='on')

ax.grid(False)

#叠加:
m=ax.contourf(ds.T[0,-1],globe=True,vmin=230,vmax=320,cmap='coolwarm',levels=12,linewidths=0.2)
ax.colorbar(m,loc='b',drawedges=True,pad=2,locator=16,tickwidth=1.,ticklabelsize=12,linewidth=1.,
            minorlocator=8,ticklen=5,labelsize=10,label='')

ax.format(grid=False,ltitle='Temperature',titlesize=15,titlepad=15,rtitle='(K)',suptitle='Your First Plot'
          ,suptitlesize=20)

xarray 的 contourf 函数内还有很多参数。例如 vmin, vmax 设置最大、最小值,linewidth 、edgecolor 显示 contour 的颜色和宽窄。在 ax.colorbar() 中也可传入 colorbar 的参数,如 locator 可以调整数字显示间隔、ticklabelsize 来调整标签(240、256、272等)的大小。具体的一些参数介绍可见下方官网。

#contour相关参数的网址:
https://proplot.readthedocs.io/en/latest/api/proplot.axes.PlotAxes.contourf.html?highlight=contourf#proplot.axes.PlotAxes.contourf
#Axes.colorbar相关参数的网址
https://proplot.readthedocs.io/en/latest/api/proplot.axes.Axes.colorbar.html?highlight=colorbar

这就是利用 proplot 绘制的第一张气象图了,大家可以多试着调整一下,看看这张图会发生什么变化。

原文地址:https://cloud.tencent.com/developer/article/2135663

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340