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