时间-经度剖面图能很直观展现出某一物理量在一段时间内在经度上的变化。
本文选取1954-1956三年对5°S-5°N的sst数据做平均绘制时间-经度剖面图
首先,依旧是引用第三方库,我一般会直接引用一些常用的库
import numpy as np
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from matplotlib import font_manager as fm
from matplotlib.pyplot import MultipleLocator
import matplotlib.ticker as mticker
from matplotlib import ticker, cm
import matplotlib
接着就是读取我们的sst文件
path='C:\\sst.nc'
sst=xr.open_dataset(path).sst
我们选取月份
gb = sst.groupby("time.month")
接着计算sst异常值,即原值减去平均值,并取纬度的平均值
ssta = gb - gb.mean(dim="time")#计算异常
ssta=ssta.sel(time=slice('1954','1956'))#选取三年
ssta=ssta.sel(lat=slice(5,-5),lon=slice(120,280))#选取-5 - 5北纬
ssta=ssta.mean('lat')
ssta=ssta.sortby('time',ascending=False)
#对时间-月进行转换
ssta['time']=np.arange(1,36+1,1)
此时我们的ssta已经是完善的数据了,直接绘图即可
fig = plt.figure(figsize=(4,7))
ax = fig.add_axes([0.1,0.1,0.9,0.9])
ax.set_xticks(list(range(120,280+40,40)))#设置xy轴刻度
ax.set_yticks(np.arange(1,36+1,1))
ax.set_yticklabels([12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1])
lon_formatter = LongitudeFormatter(zero_direction_label=False)
ax.xaxis.set_major_formatter(lon_formatter)
cbar_kwargs = {'ticks':np.arange(-2,2+1,1),'label':'','orientation':'horizontal','pad':0.07}
cf=ssta.plot.contourf(cmap='rainbow',levels=np.arange(-2,2+.1,.1),extend='both',add_colorbar=True,cbar_kwargs=cbar_kwargs)
ax.text(88,6.5,'1956')
ax.text(88,6.5+12,'1955')
ax.text(88,6.5+24,'1954')
ax.set_title('SST anomaly',loc='center')
ax.set_xlabel('')
ax.set_ylabel('')
fig.savefig('1.png',bbox_inches='tight',dpi=600)
最后得出图
完整代码如下
import numpy as np
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import xarray as xr
import cartopy.crs as ccrs
import cartopy.feature as cfeat
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from matplotlib import font_manager as fm
from matplotlib.pyplot import MultipleLocator
import matplotlib.ticker as mticker
from matplotlib import ticker, cm
import matplotlib
path='C:\\Users\\85467\\Desktop\\\sst.mnmean (1)\\sst.mnmean (1).nc'
sst=xr.open_dataset(path).sst
gb = sst.groupby("time.month")
ssta = gb - gb.mean(dim="time")#计算异常
ssta=ssta.sel(time=slice('1954','1956'))#选取三年
ssta=ssta.sel(lat=slice(5,-5),lon=slice(120,280))#选取-5 - 5北纬
ssta=ssta.mean('lat')
ssta=ssta.sortby('time',ascending=False)
ssta['time']=np.arange(1,36+1,1)
fig = plt.figure(figsize=(4,7))
ax = fig.add_axes([0.1,0.1,0.9,0.9])
ax.set_xticks(list(range(120,280+40,40)))#设置xy轴刻度
ax.set_yticks(np.arange(1,36+1,1))
ax.set_yticklabels([12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1,12,11,10,9,8,7,6,5,4,3,2,1])
lon_formatter = LongitudeFormatter(zero_direction_label=False)
ax.xaxis.set_major_formatter(lon_formatter)
cbar_kwargs = {'ticks':np.arange(-2,2+1,1),'label':'','orientation':'horizontal','pad':0.07}
cf=ssta.plot.contourf(cmap='rainbow',levels=np.arange(-2,2+.1,.1),extend='both',add_colorbar=True,cbar_kwargs=cbar_kwargs)
ax.text(88,6.5,'1956')
ax.text(88,6.5+12,'1955')
ax.text(88,6.5+24,'1954')
ax.set_title('SST anomaly',loc='center')
ax.set_xlabel('')
ax.set_ylabel('')
fig.savefig('1.png',bbox_inches='tight',dpi=600)
2万+

被折叠的 条评论
为什么被折叠?



