You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调整Contour Plots等高线图绘制值 剔除负值匹配数值解效果的方法咨询

等高线图负值异常修正方案

问题根因

  • 闭式解仅取前25项级数计算存在截断误差,边界区域会产生无意义负值
  • 两次调用contourf时采用自动生成的色阶范围,没有对齐数值解的数值区间,导致显示效果不一致
  • 之前调整Z值未生效大概率是没有固定等高线层级,matplotlib仍会根据当前数据自动适配色阶

具体修改步骤

  1. 先获取数值解的数值区间,作为两幅图统一的显示范围
# 先拿到数值解v1的最值(保证两幅图色阶完全一致)
v_min = 0  # 也可以直接用v1.min()如果数值解的最小值是合理值
v_max = v1.max()
fixed_levels = np.linspace(v_min, v_max, 20)
  1. 修正闭式解函数的语法错误(当前代码里sp1.iv(1(n*np.pi*r)/gamma)写法错误,第一参数是阶数,第二参数是自变量,应该改为)
def v(r,z,gamma):
    a=r*(1-z/gamma) 
    sums = 0
    for n in range(1,26):
        # 修正iv函数的参数写法
        sums += ((sp1.iv(1, (n*np.pi*r)/gamma))/(n*sp1.iv(1, (n*np.pi)/gamma)))*np.sin(n*np.pi*z/gamma)    
    return a-(2/np.pi)*sums
  1. 调整plot_contour函数,支持固定范围输入,同时裁剪负值
def plot_contour(a, filename=None, zlabel='v(r,z)',cmap=plt.cm.gnuplot, levels=None, vmin=None, vmax=None):
    fig = plt.figure(figsize=(5,4))
    ax = fig.add_subplot(111)

    x = np.arange(a.shape[0])
    y = np.arange(a.shape[1])
    X, Y = np.meshgrid(x, y)
    Z = a[X, Y]
    # 裁剪负值,也可以用Z[Z<0] = np.nan直接不显示负值区域
    if vmin is not None:
        Z = np.clip(Z, vmin, vmax)
    # 指定固定levels保证色阶一致
    cset = ax.contourf(X, Y, Z, levels=levels if levels is not None else 20, cmap=cmap, vmin=vmin, vmax=vmax)
    ax.set_xlabel('r')
    ax.set_ylabel('z')
    ax.set_title('Γ=2.5')
    ax.axis('off')
    ax.set_aspect(1)

    cb = fig.colorbar(cset, shrink=0.5, aspect=5)
    cb.set_label(zlabel)
    
    if filename:
        fig.savefig(filename,dpi=1600)
        plt.close(fig)
        return filename
    else:
        return ax
  1. 调用的时候统一传入固定参数即可
# 绘制数值解
plot_contour(v1, 'gamma25e+1_num', levels=fixed_levels, vmin=v_min, vmax=v_max)
# 绘制闭式解,v_closed为你生成的闭式解矩阵
plot_contour(v_closed, 'gamma25e+1_closed', levels=fixed_levels, vmin=v_min, vmax=v_max)

如果需要完全隐藏负值区域而不是置为最小值,把Z = np.clip(Z, vmin, vmax)换成Z[Z < vmin] = np.nan即可,matplotlib会自动留白负值区域,不会绘制。

内容的提问来源于stack exchange,提问作者help

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:06:11