
代码绘制成果展示











代码解释


第一部分

# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import rioxarray as rxrfrom utils import plotimport cartopy.crs as ccrsimport numpy as npimport matplotlib.pyplot as pltimport matplotlib.path as mpathimport matplotlib.colors as mcolors

第二部分

# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {1: ['#3288BD', '#66C2A5', '#88CFA4', '#ABDDA4', '#C7E9AD', '#E6F598', '#F6FAAA', '#FFFFBF', '#FEE08B', '#FDAE61','#F46D43', '#D53E4F', '#9E0142', '#8073AC', '#5E4FA2'],}

第三部分

# =========================================================================================# ======================================3.绘图函数=======================================# =========================================================================================def plot_northern_hemisphere(data_for_map, valid_pixels, scheme_index):num_values = len(BAR_LABELS) #色阶的数量colors_list = base_cmap(np.linspace(0, 1, num_values)) #在颜色映射中均匀采样获取颜色列表cmap = ListedColormap(colors_list) #构建离散的色彩映射norm = mcolors.BoundaryNorm(boundaries=MAP_LEVELS, #色彩的数据边界范围ncolors=num_values) #颜色总数

第四部分

theta = np.linspace(0, 2 * np.pi, 100) # 成圆弧角度数组center, radius = [0.5, 0.5], 0.5 # 设定裁剪圆形的中心和半径verts = np.vstack([np.sin(theta), np.cos(theta)]).T # 计算圆周在坐标系上的顶点坐标circle = mpath.Path(verts * radius + center) # 构建圆形路径对象ax.set_boundary(circle, transform=ax.transAxes) # 将地图边框裁剪为该圆形cbar.ax.tick_params(axis='y', #轴which='both', #主次刻度width=0, #刻度线宽度length=0, #刻度线长度labelsize=20) #字号cbar.outline.set_visible(True) #颜色条边框cbar.outline.set_linewidth(1) #边框线宽

第五部分

ax_hist = fig.add_axes([0.13, 0.2, 0.25, 0.18]) #直方图子图位置target_values = [-4, -3, -2, -1, 0, 1, 2, 3, 4] #直方图统计目标区间counts = [] #频数统计列表#遍历各目标区间数值for val in target_values:count = np.sum(np.isclose(valid_pixels, val, atol=0.1)) #计算容差内有效像素的数量counts.append(count) #保存# 设置直方图x轴标签ax_hist.set_xticklabels(BAR_LABELS, #文本fontsize=9, #字号weight='bold') #加粗ax_hist.set_ylim(0, max(hist_percentages) * 1.35 if hist_percentages else 1) #y轴范围

第六部分

#绘制经纬度网格线gls = ax.gridlines(crs=ccrs.PlateCarree(), #主图draw_labels=False, #网格标签linewidth=1, #线宽color='gray', #线色alpha=0.9, #透明度linestyle='--') #虚线gls.xlocator = plt.FixedLocator(np.arange(-180, 181, 60)) #经度线gls.ylocator = plt.FixedLocator([30, 60, 90]) #纬度线# 标注纬度数值标签for lat_val, txt in zip([30, 60, 90], ["30°N", "60°N", "90°N"]):#标注文本ax.text(180, #经线lat_val, #纬度txt, # 文本transform=ccrs.PlateCarree(), #坐标系fontsize=24, #字号ha='center') #水平

第七部分

# =========================================================================================# ==========================================4.执行部分=======================================# =========================================================================================if __name__ == '__main__':SCHEME_INDEX = 3 #默认配色DOWNSAMPLE_FACTOR = 3 #降采样时的缩小倍数pbar = tqdm(total=4, desc="总体进度") #开启进度条file_path = r'整形.tif' #原始数据#是否批量绘图plot_all = Trueif plot_all:for i in range(1, 61):if i in COLOR_SCHEMES:plot_northern_hemisphere(data_renamed, valid_pixels, i)else:target_scheme = 22plot_northern_hemisphere(data_renamed, valid_pixels, target_scheme)pbar.close()

如何应用到你自己的数据

1.设置降采样系数,执行部分:
DOWNSAMPLE_FACTOR = 3 #降采样时的缩小倍数2.设置原始数据的保存路径,执行部分:
file_path = r'整形.tif' #原始数据3.设置有效数据范围,执行部分:
data_raw = data.where((data != nodata_value) & (data >= -4.5) & (data <= 4.5)) #剔除无效像元4.设置是否批量绘图,执行部分:
plot_all = True5.设置数据离散等级和文本标签,环境设置部分:
MP_LEVELS = [-4.5, -3.5, -2.5, -1.5, -0.5, 0.5, 1.5, 2.5, 3.5, 4.5] #数值离散等级BAR_LABELS = ['-4', '-3', '-2', '-1', '0', '1', '2', '3', '4'] #颜色条的标签文本
6.设置颜色条刻度位置,绘图函数部分:
cbar_ticks_loc = [-4, -3, -2, -1, 0, 1, 2, 3, 4]7.设置绘图结果保存地址,绘图函数部分:
plt.savefig(fr'{scheme_index}.png', bbox_inches='tight', dpi=300)
推荐


获取方式
