【气象常用】剖面图

您所在的位置:网站首页 绘制地形剖面图的一般步骤 【气象常用】剖面图

【气象常用】剖面图

2024-07-12 11:54| 来源: 网络整理| 查看: 265

效果图:

主要步骤:

1. 数据准备:我用的era5的散度数据(大家替换为自己的就好啦,era5数据下载方法可以看这里【数据下载】ERA5 各高度层月平均数据下载_era5月平均数据-CSDN博客)

2. 数据处理:

3. 图像绘制:

详细代码:着急的直接拖到最后有完整代码

步骤一:导入库包及图片存储路径并设置中文字体为宋体,西文为新罗马(没有的库包要先下好奥,字体设置部分没有要求的话可以直接删除)

import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mticker import xarray as xr # 设置西文字体为新罗马字体,中文为宋体,字号为12 from matplotlib import rcParams config = { "font.family": 'serif', "font.size": 12, "mathtext.fontset": 'stix', "font.serif": ['SimSun'], } rcParams.update(config) rcParams['axes.unicode_minus']=False datapath = r'H:/00.csdn/01data/' figpath = r'H:/00.csdn/02fig/' shppath = r'H:/00.csdn/04shp/cn_shp/Province_9/Province_9.shp'

步骤二:读入数据

# 读入数据 f1 = xr.open_dataset(datapath + '202306_div.nc') # print(f1) div = f1['d'][0, 14:, :, :].values * 10**6 time = f1['time'] lons = f1['longitude'].values lats = f1['latitude'].values lon, lat = np.meshgrid(lons, lats) lev = f1['level'][14:].values log_lev = np.log10(lev) print(log_lev) print(lev)

步骤三:计算纬圈平均

########################################################## # 数据处理 div_mean = np.mean(div, 1)

步骤四:绘制图像(剖面图+指定位置打点)

########################################################## # 绘制图像 fig = plt.figure(figsize=(15, 6)) level = np.linspace(-4, 4, 9) def plot_cont(location, data, text, textposition): ax = fig.add_axes(location) cs = ax.contourf(lons, log_lev, data, levels=level, cmap='RdBu_r', extend='both') ax.plot(110, 2.9, 'r*', markersize=10) # 'r*'表示红色星号,markersize控制大小 # 翻转纵坐标(即让高度从下到上递增) ax.invert_yaxis() x = ['%i°E' %lon for lon in lons[::40]] y = [200, 300, 500, 700, 850, 1000] ax.set(xticks=lons[::40], xticklabels=x, yticks=np.log10(y), yticklabels=y, ylabel='hPa') # 设置标题和位置 title = ax.set_title(text, fontsize=12) title.set_position(textposition) # 调整位置 return cs # 调用上面的函数 c1 = plot_cont([0.1, 0.1, 0.3, 0.25], div_mean, '(a) ERA5', [0.05, 1.05]) c1 = plot_cont([0.45, 0.1, 0.3, 0.25], div_mean, '(b) ERA5', [0.05, 1.05]) # 色标设置 rect = [0.12, 0.015, 0.6, 0.02] cbar_ax = fig.add_axes(rect) cb = fig.colorbar(c1, drawedges=True, cax=cbar_ax, orientation='horizontal') cb.set_label('mm', fontsize=12) cb.ax.tick_params(length=0)

步骤五:保存图像

# 保存图像 plt.savefig(figpath+'215 剖面图.png', dpi=600, bbox_inches='tight') plt.show()

完整代码在这里:

import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as mticker import xarray as xr # 设置西文字体为新罗马字体,中文为宋体,字号为12 from matplotlib import rcParams config = { "font.family": 'serif', "font.size": 12, "mathtext.fontset": 'stix', "font.serif": ['SimSun'], } rcParams.update(config) rcParams['axes.unicode_minus']=False datapath = r'H:/00.csdn/01data/' figpath = r'H:/00.csdn/02fig/' shppath = r'H:/00.csdn/04shp/cn_shp/Province_9/Province_9.shp' ########################################################## # 读入数据 f1 = xr.open_dataset(datapath + '202306_div.nc') # print(f1) div = f1['d'][0, 14:, :, :].values * 10**6 time = f1['time'] lons = f1['longitude'].values lats = f1['latitude'].values lon, lat = np.meshgrid(lons, lats) lev = f1['level'][14:].values log_lev = np.log10(lev) print(log_lev) print(lev) ########################################################## # 数据处理 div_mean = np.mean(div, 1) ########################################################## # 绘制图像 fig = plt.figure(figsize=(15, 6)) level = np.linspace(-4, 4, 9) def plot_cont(location, data, text, textposition): ax = fig.add_axes(location) cs = ax.contourf(lons, log_lev, data, levels=level, cmap='RdBu_r', extend='both') ax.plot(110, 2.9, 'r*', markersize=10) # 'r*'表示红色星号,markersize控制大小 # 翻转纵坐标(即让高度从下到上递增) ax.invert_yaxis() x = ['%i°E' %lon for lon in lons[::40]] y = [200, 300, 500, 700, 850, 1000] ax.set(xticks=lons[::40], xticklabels=x, yticks=np.log10(y), yticklabels=y, ylabel='hPa') # 设置标题和位置 title = ax.set_title(text, fontsize=12) title.set_position(textposition) # 调整位置 return cs # 调用上面的函数 c1 = plot_cont([0.1, 0.1, 0.3, 0.25], div_mean, '(a) ERA5', [0.05, 1.05]) c1 = plot_cont([0.45, 0.1, 0.3, 0.25], div_mean, '(b) ERA5', [0.05, 1.05]) # 色标设置 rect = [0.12, 0.015, 0.6, 0.02] cbar_ax = fig.add_axes(rect) cb = fig.colorbar(c1, drawedges=True, cax=cbar_ax, orientation='horizontal') cb.set_label('mm', fontsize=12) cb.ax.tick_params(length=0) ########################################################## # 保存图像 plt.savefig(figpath+'215 剖面图.png', dpi=600, bbox_inches='tight') plt.show()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3