气ython风雨 发表于 2024-4-19 17:21:22

两种简单ERA5绘制等值线与填色图的方式


前言
当要展示大气要素的空间分布和变化规律时,绘制ERA5数据的等值线和填色图就变得尤为重要啦!这两种方法简单易行,让我们来看看它们吧。
首先,我们有MetPy库。这个家伙是专为大气科学数据分析和可视化而生的Python库,提供了丰富的绘图功能和气象学计算工具。用它来绘制等值线和填色图,简直就是小菜一碟!
其次,咱们还有meteva库。这货是国家气象中心预报技术研发室检验科负责研发的,专门用来快速高效地检验气象产品。它能够帮助我们制作气象产品,促进跨流程跨部门的检验信息共享,为改进预报质量提供技术支持。
无论是MetPy还是meteva,都能让我们轻松愉快地绘制出漂亮的等值线和填色图,让那些枯燥的数据变得生动起来!

方法一:metpy库绘制
导入库与读取数据
from metpy.plots import ContourPlot, ImagePlot, MapPanel, PanelContainer
from metpy.units import units
import xarray as xr
nc = xr.open_dataset('/home/mw/input/era5tqzdfx9482/adaptor.mars.internal-1684907015.0619943-12842-1-c1fc11e0-4649-40a6-b30b-ef3afffd57fd.nc')
nc
数据处理:选择850hpa的位势高度
contour = ContourPlot()
contour.data = nc
contour.field = 'z'
contour.level = 850 * units.hPa
contour.linecolor = 'red'
contour.contours = 15
contour.time = pd.to_datetime(nc.time.values.item())

数据处理:选择850hpa的温度
img = ImagePlot()
img.data = nc
img.field = 't'
img.level = 850 * units.hPa
img.time = pd.to_datetime(nc.time.values.item())
绘图
panel = MapPanel()
panel.area = (110, 130, 20, 40)
panel.layers = ['coastline', 'borders', 'states', 'ocean', 'land']
panel.title = 'ERA5 test'
panel.plots =

pc = PanelContainer()
pc.size = (20, 12)
pc.panels =
pc.show()


方法二:meteva库绘制
导入库
#导入必要包
import meteva.base as meb
import numpy as np
import matplotlib.pyplot as plt
from meteva.base.tool.plot_tools import add_china_map_2basemap
plt.rcParams['font.sans-serif'] = ['Source Han Sans CN']
plt.rcParams['axes.unicode_minus'] = False# 用来正常显示负号

读取数据与数据处理
grid0 = meb.grid(,)#设置范围应小于或等于era5数据的原有范围
t = meb.io.read_griddata_from_nc('/home/mw/input/era5tqzdfx9482/adaptor.mars.internal-1684907015.0619943-12842-1-c1fc11e0-4649-40a6-b30b-ef3afffd57fd.nc',
grid = grid0,value_name="t")#读取网格数据,用于测试
z = meb.io.read_griddata_from_nc('/home/mw/input/era5tqzdfx9482/adaptor.mars.internal-1684907015.0619943-12842-1-c1fc11e0-4649-40a6-b30b-ef3afffd57fd.nc',
grid = grid0,value_name="z")

绘图部分
map_extend =
axs = meb.creat_axs(1,map_extend, ncol=1, sup_title="era5 test", sup_fontsize=12,width=10,height=10)

image = meb.add_contour(axs,z.sel(level=850,time=z.time)/98,clevs = np.arange(120,180,2))
image = meb.add_contourf(axs,t.sel(level=850,time=z.time),clevs = np.arange(280,320,4))


你喜欢哪一种绘制方法呢

文章来源于公众号:气ython风雨


页: [1]
查看完整版本: 两种简单ERA5绘制等值线与填色图的方式