前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ProPlot库(二)】 动手画你的第一个气象图

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

作者头像
自学气象人
发布2022-10-09 09:46:39
1.3K0
发布2022-10-09 09:46:39
举报
文章被收录于专栏:自学气象人自学气象人

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

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

代码语言:javascript
复制
#xarray官网:http://xarray.pydata.org/en/stable/
代码语言:javascript
复制
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() 添加颜色条的标注。

代码语言:javascript
复制
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(一)),只需要再添加几行代码和参数,便可以画出比较美观的全球范围气温的等值线图。

代码语言:javascript
复制
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等)的大小。具体的一些参数介绍可见下方官网。

代码语言:javascript
复制
#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 绘制的第一张气象图了,大家可以多试着调整一下,看看这张图会发生什么变化。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 自学气象人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档