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

2022-10-09 09:46:39 浏览数 (1)

学习气象少不了与等值线 (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 绘制的第一张气象图了,大家可以多试着调整一下,看看这张图会发生什么变化。

0 人点赞