看好了,雷达剖面可以这样画

文摘   2024-08-28 08:46   北京  









01
前言

本文旨在探讨两种不同的方法,用于绘制雷达反射率和剖面,通过比较它们的优缺点,以及适用的场景。
我们将介绍这两种方法的实现步骤和代码示例,它们分别是

  1. Py-ART:一个包含了天气雷达算法和程序的Python第三方库。Py-ART一开始被大气辐射测量与气候研究机构(Atmospheric Radiation Measurement (ARM) Climate Research Facility)用来处理来自其降水与云雷达的测量数据,但是现在它已经被设计成可以被其他雷达和气候团队用来检验、处理和分析多种天气雷达数据的库。

  2. PyCINRAD:一个气象雷达开源库,支持中国所有主流雷达格式的读取,并提供一些实用的算法以及可视化。


02
下载与安装雷达库

!pip install pycwr -i https://pypi.mirrors.ustc.edu.cn/simple/!pip install arm-pyart -i https://pypi.mirrors.ustc.edu.cn/simple/


03
pyart版本


01


导入库与转格式
import cartopy.crs as ccrsimport matplotlib.pyplot as pltfrom pycwr.io import read_autoimport pyartimport cmapsPRD = read_auto('/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin')radar = PRD.ToPyartRadar()

02


数据过滤
#第一行代码创建了一个名为gatefilter的GateFilter对象,#并将雷达数据radar作为参数传入。GateFilter对象用于过滤雷达数据,以便在之后的处理中排除不需要的部分。#第二行代码调用了GateFilter对象的exclude_transition方法,#这个方法用于排除转换区域的数据,因为在雷达扫描的时候,#会出现一些转换区域的数据是无效的或者不稳定的,需要被排除掉。#第三行代码调用了GateFilter对象的exclude_above方法,#指定了要排除的字段为"reflectivity",并设置了反射率的上限为100。#这意味着我们将排除雷达反射率超过100的数据点,#因为这些可能是异常数据或干扰数据,需要进行过滤处理。gatefilter = pyart.filters.GateFilter(radar)gatefilter.exclude_transition()gatefilter.exclude_above("reflectivity", 100)


03


数据格点化


grid = pyart.map.grid_from_radars(    (radar,),    gatefilters=(gatefilter,),   grid_shape=(200, 500, 500),   # 设置了网格的形状为 (200, 500, 500),想计算速度快点可以减少格点数    grid_limits=( (  0.0,  20000,),(-200000.0, 200000.0),(-200000, 200000.0)), #设置了网格的范围    grid_origin=(32.2 ,118.7),   # 绘图中心    fields=["reflectivity"],    # 变量)

04


绘图部分
# 设置起点与终点start = (32, 117.5)end = (33, 118.5)cmap1=cmaps.radar# 绘制雷达反射率fig = plt.figure(figsize=(18, 6))ax1 = plt.subplot(121, projection=ccrs.PlateCarree())display = pyart.graph.GridMapDisplay(grid)display.plot_grid(    "reflectivity",    ax=ax1,    cmap=cmap1,    vmin=0,    vmax=70,)# 剖线ax1.scatter(start[1], start[0], color="tab:blue", label="Start")ax1.scatter(end[1], end[0], color="black", label="End")ax1.plot([start[1], end[1]], [start[0], end[0]], color="k", linestyle=":")plt.legend(loc="upper right")# 绘制剖面ax2 = plt.subplot(122)display.plot_cross_section(    "reflectivity",    start,    end,    x_axis="lat",    cmap=cmap1,    vmin=0,    vmax=70,)plt.show()


04
pycinrad版本
import cinradfrom cinrad.io import CinradReader, StandardDatafrom cinrad.visualize import PPI, Sectionimport numpy as npimport matplotlib.pyplot as plt
f = CinradReader("/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin")rl = [f.get_data(i, 150, 'REF') for i in f.angleindex_r]vcs = cinrad.calc.VCS(rl)sec = vcs.get_section(start_cart=(117.5, 32), end_cart=(118.5, 33))fig = PPI(rl[0], dpi=50)fig.settings['is_inline'] = Falsefig.plot_cross_section(sec)plt.show()


相较而言,pyart绘制雷达剖面方式较为自由,留给使用者很大的操作空间,例如网格化,设置过滤等功能都是值得称赞的
pycinrad则更容易入手,不必考虑太多的参数,这个从代码量即可判断



封面由ai绘制

prompt: color photo of a weather radar in action —c 10 —ar 2:3




点分享
点收藏
点在看
点点赞
END
分享
收藏
在看
点赞




气python风雨
主要发一些涉及大气科学的Python文章与个人学习备忘录
 最新文章