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

基于Python Matplotlib绘制非结构化网格温度数据的填充等高线图

解决非结构化网格数据的填充等高线图绘制问题

你的问题核心在于contourf要求输入的Z必须是和X、Y匹配的2D数组,但你的temp是1D的,且非结构化网格无法直接用meshgrid生成对应网格。以下是两种可行的解决方案:

方法一:插值到规则网格(适合需要规则网格输出的场景)

使用scipy.interpolate.griddata将非结构化的1D温度数据插值到规则网格上,再用contourf绘制:

import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# 假设x、y、temp是已加载的1D数组
x = np.asarray(x)
y = np.asarray(y)
temp = np.asarray(temp)

# 生成规则网格的坐标范围
xi = np.linspace(x.min(), x.max(), 100)
yi = np.linspace(y.min(), y.max(), 100)
Xi, Yi = np.meshgrid(xi, yi)

# 插值得到2D的温度数据
Zi = griddata((x, y), temp, (Xi, Yi), method='cubic')  # 可选linear/nearest/cubic

# 绘制填充等高线
fig, ax = plt.subplots(1, 1)
contour = ax.contourf(Xi, Yi, Zi)
plt.colorbar(contour)
plt.show()
  • linspace的100可按需调整,数值越大网格精度越高
  • griddata的method参数:nearest速度最快但精度最低,linear是线性插值,cubic插值结果更平滑

方法二:直接基于三角剖分绘制(适合保留原始网格结构的场景)

利用matplotlib.tri.Triangulation对非结构化点做三角剖分,用tricontourf直接绘制,无需转换为规则网格:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.tri as tri

# 假设x、y、temp是已加载的1D数组
x = np.asarray(x)
y = np.asarray(y)
temp = np.asarray(temp)

# 创建三角剖分对象
triang = tri.Triangulation(x, y)

# 绘制填充等高线
fig, ax = plt.subplots(1, 1)
contour = ax.tricontourf(triang, temp)
plt.colorbar(contour)
plt.show()
  • 该方法直接使用原始非结构化点,无需插值,能更精准反映原始数据分布
  • 若点分布存在异常(如凹域),可借助tri.TriAnalyzer过滤不合理的三角形

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 01:32:01