如何将二维插值生成的Z矩阵中指定范围外的数值点设置为0
你可以通过 numpy 布尔索引对插值后的z_new矩阵做掩码处理即可实现需求,具体实现如下:
实现步骤
- 先确认你图中红色框的坐标边界,即x轴的最小值/最大值、y轴的最小值/最大值,替换下方示例中的对应参数
- 生成和
z_new维度一致的布尔掩码,将红框范围外的点位对应数值置为0 - 修正你原有代码里的笔误:
contourf方法传入的znew应为z_new
修改后完整代码
import numpy as np from scipy import interpolate import matplotlib.pyplot as plt # 你的原有数据处理逻辑 x = data.columns.astype('float64') y = data.index.to_numpy() z = data.to_numpy() ratio = 4 x_new = x * ratio y_new = y * ratio f = interpolate.interp2d(x, y, z, kind='linear') z_new = f(x_new, y_new) X_new, Y_new = np.meshgrid(x_new, y_new) # ========== 新增:红框外数值置0逻辑 ========== # 请替换为你实际红框的坐标范围 x_min, x_max = 2, 8 # 示例值,改为你红框的x轴上下限 y_min, y_max = 1, 6 # 示例值,改为你红框的y轴上下限 # 生成掩码:不在红框范围内的点位标记为True mask = (X_new < x_min) | (X_new > x_max) | (Y_new < y_min) | (Y_new > y_max) # 掩码对应位置的z值设为0 z_new[mask] = 0 # ========== 新增逻辑结束 ========== # 绘图,修正原有笔误znew为z_new plt.contourf(X_new, Y_new, z_new, alpha = 1, cmap=plt.cm.inferno) plt.show()
扩展说明
如果你不需要将范围外数值置0,只是想让其不显示在图中,也可以把对应位置设为np.nan,matplotlib会自动渲染为透明区域,只需要把上面置0的代码替换为:
z_new[mask] = np.nan
内容的提问来源于stack exchange,提问作者wosker4yan
相关产品推荐
相关产品推荐

