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

绘制Contour图时无法完整显示44×54矩阵全部行列的问题

解决Contour图无法完整展示矩阵首/末行/列的问题

我来帮你搞定这个困扰!你遇到的核心问题是对matplotlib.pyplot.contourf中坐标数组的含义理解有点偏差,导致边缘数据被截断。咱们一步步来解决:

问题根源分析

你的矩阵是44行×54列,你生成的x1(54个元素)和x2(44个元素)长度本身是符合要求的,但你把坐标设成了网格块的边界,而不是数据对应的位置/中心。contourf默认会把x和y数组当作数据点的坐标,然后在相邻点之间绘制轮廓,这就导致边缘的网格块只有一半能显示在图中,看起来像是首/末行/列被省略了。

两种可行的解决方案

方案一:使用网格单元的中心坐标

如果你的数据是每个网格单元的数值,那么x和y应该对应单元的中心位置,再手动调整坐标轴范围覆盖整个网格区域:

修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def contour_plot(filename):
    # 读取数据(这里用随机数据模拟,实际替换回np.loadtxt(filename))
    data = np.random.random((44,54))
    
    # 生成网格单元的中心坐标
    # 54列对应54个中心x坐标,从0.5*130.75到(54-0.5)*130.75
    x1 = [(i + 0.5) * 130.75 for i in range(54)]
    # 44行对应44个中心y坐标
    x2 = [(j + 0.5) * 130.75 for j in range(44)]
    
    plt.contourf(x1, x2, data[::-1])
    plt.colorbar()
    plt.title("Porosity")
    
    # 调整坐标轴范围,覆盖整个网格的边界(从0到最大边界值)
    plt.xlim(0, 54 * 130.75)
    plt.ylim(0, 44 * 130.75)
    
    plt.savefig('Porosity.png', bbox_inches='tight')

contour_plot("Nechelik.dat")

方案二:使用网格的边界坐标(更直观)

contourf也支持直接传入网格的边界坐标,此时x的长度是列数+1,y的长度是行数+1,矩阵的每个元素对应一个边界围成的矩形区域:

修改后的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def contour_plot(filename):
    data = np.random.random((44,54))
    
    # 生成网格边界坐标:54列对应55个x边界(0到54*130.75)
    x_bound = [i * 130.75 for i in range(55)]
    # 44行对应45个y边界(0到44*130.75)
    y_bound = [j * 130.75 for j in range(45)]
    
    # 传入边界坐标,contourf会自动把data的每个元素对应到对应的矩形区域
    plt.contourf(x_bound, y_bound, data[::-1])
    plt.colorbar()
    plt.title("Porosity")
    
    plt.savefig('Porosity.png', bbox_inches='tight')

contour_plot("Nechelik.dat")

为什么这样能解决问题?

  • 方案一中,中心坐标让每个数据点对应网格单元的中心,再通过xlim和ylim把坐标轴范围扩展到整个网格的边界,确保边缘单元完整显示。
  • 方案二中,直接使用边界坐标,contourf会明确知道每个数据元素对应的是哪个矩形区域,自然能完整覆盖所有44行54列的数据,不需要额外调整坐标轴范围。

你可以根据自己的习惯选择其中一种方案,两种都能解决你遇到的边缘数据缺失问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:25:32