当前位置:首页>python>python实现北半球投影绘图-适用于离散型 数据

python实现北半球投影绘图-适用于离散型 数据

  • 2026-10-11 06:15:25
python实现北半球投影绘图-适用于离散型 数据

代码绘制成果展示

结果图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 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 = True    if plot_all:        for i in range(1, 61):            if i in COLOR_SCHEMES:                plot_northern_hemisphere(data_renamed, valid_pixels, i)    else:        target_scheme = 22        plot_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 = True

5.设置数据离散等级和文本标签,环境设置部分:

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)

推荐

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中目前包含近300篇代码+数据+参考论文,后续将会持续更新,需要请后台私信我,注意只会分享练习数据、参考论文和代码文件,仅提供有关代码的答疑,不会提供其他答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章