使用pycwr读取了文件,将每层导出为csv,并且使用pycwr的色标
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import pycwr
from pycwr.configure.default_config import CINRAD_COLORMAP, CINRAD_field_mapping # 导入pycwr色标配置
# 读取CSV文件
data = pd.read_csv('E:\\learn_torch\\radar_spar_project\\run_data\\result\\predictions.csv', header=0)
# data = pd.read_csv('E:\\learn_torch\\radar_spar_project\\run_data\\data\\layer_1_reflectivity.csv', header = 0)
# data = np.array(data)[:,1:] #检验导出数据时使用
# 将数据除以100(假设原始数据单位为0.01*dBZ)
data = data / 100
print(data.values.shape)
# 创建极坐标网格
num_azimuth = data.shape[0] # 方位角数量
num_range = data.shape[1] # 距离数量
# num_range = 920
# 设定方位角从60°开始,雷达数据有359个方位角
# start_azimuth = 60 # 以60度为起点
start_azimuth = 0 #126.5
azimuths = np.linspace(np.radians(start_azimuth), np.radians(start_azimuth + 360), num_azimuth, endpoint=False)
ranges = np.linspace(0, 100, num_range) # 距离范围0-100km
#ranges = np.linspace(0, 250, num_range) # 距离范围0-100km
# ========================== 关键修改:使用pycwr的色标 ==========================
# 获取反射率(dBZ)的色标配置
field_name = "dBZ" # 指定雷达产品类型
mapped_key = CINRAD_field_mapping[field_name] # 映射到内部名称(例如:'reflectivity')
cmap_config = CINRAD_COLORMAP[mapped_key] # 获取色标参数
boundaries = [-5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75] # 设置区间
# 提取颜色映射和标准化参数
# cmap = cmap_config["cmap"] # 颜色映射对象(如ListedColormap)
cmap = CINRAD_COLORMAP[CINRAD_field_mapping['dBZ']]
cmaps = plt.get_cmap(cmap)
# norm = cmap_config["norm"] # 标准化参数(如BoundaryNorm)
norm = mcolors.BoundaryNorm(boundaries, cmaps.N) # 定义色标范围
# ===========================================================================
# 创建极坐标图
plt.figure(figsize=(10, 8))
ax = plt.subplot(111, projection='polar')
# 设置极坐标参数
ax.set_theta_direction(-1) # 顺时针旋转
ax.set_theta_offset(np.pi / 2) # 0度在顶部(正北)
# 生成网格并绘制数据
R, T = np.meshgrid(ranges, azimuths)
pcm = ax.pcolormesh(T, R, data.values, cmap=cmap, norm=norm, shading='auto')
# 设置颜色条
cbar = plt.colorbar(pcm, ax=ax)
cbar.ax.tick_params(labelsize=14)
# 自动生成色标标签(根据pycwr的norm参数)
cbar.set_ticks(norm.boundaries) # 使用norm中定义的边界
cbar.set_ticklabels([str(int(b)) for b in norm.boundaries]) # 格式化为整数标签
# 设置标题
# plt.title('Radar Reflectivity (dBZ)')
plt.title('5.0°(dBZ)')
# 显示图像
plt.show()