气ython风雨 发表于 2024-5-27 18:33:59

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


01 前言

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

[*]Py-ART:一个包含了天气雷达算法和程序的Python第三方库。Py-ART一开始被大气辐射测量与气候研究机构(Atmospheric Radiation Measurement (ARM) Climate Research Facility)用来处理来自其降水与云雷达的测量数据,但是现在它已经被设计成可以被其他雷达和气候团队用来检验、处理和分析多种天气雷达数据的库。
[*]PyCINRAD:一个气象雷达开源库,支持中国所有主流雷达格式的读取,并提供一些实用的算法以及可视化。

02 下载与安装雷达库
!pip install pycwr -i <a href="https://pypi.mirrors.ustc.edu.cn/simple/" target="_blank">https://pypi.mirrors.ustc.edu.cn/simple/</a>
!pip install arm-pyart -i <a href="https://pypi.mirrors.ustc.edu.cn/simple/" target="_blank">https://pypi.mirrors.ustc.edu.cn/simple/</a>

03 pyart版本
01导入库与转格式
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from pycwr.io import read_auto
import pyart
import cmaps
PRD = 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, start, color="tab:blue", label="Start")ax1.scatter(end, end, color="black", label="End")ax1.plot(, end], , end], 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 cinrad
from cinrad.io import CinradReader, StandardData
from cinrad.visualize import PPI, Section
import numpy as np
import matplotlib.pyplot as plt

f = CinradReader("/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin")
rl =
vcs = cinrad.calc.VCS(rl)
sec = vcs.get_section(start_cart=(117.5, 32), end_cart=(118.5, 33))
fig = PPI(rl, dpi=50)
fig.settings['is_inline'] = False
fig.plot_cross_section(sec)
plt.show()
相较而言,pyart绘制雷达剖面方式较为自由,留给使用者很大的操作空间,例如网格化,设置过滤等功能都是值得称赞的
pycinrad则更容易入手,不必考虑太多的参数,这个从代码量即可判断

文章来源于公众号:气python风雨
页: [1]
查看完整版本: 看好了,雷达剖面可以这样画