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

Python中在tricontourf等值面图绘制z=0等值线的实现方法

实现散点数据插值并绘制z=0等值线

问题背景

我现有一张通过tricontourf生成的等值面图,基于散点数据绘制。需求是:对数据点进行插值处理,同时在图上叠加绘制温度(z值,对应tempdiff)等于0的等值线。原代码如下:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import scipy.interpolate

# Load the 3D data file
data = np.genfromtxt("Ta_parameterspace_2mm.txt", skip_header=14, delimiter="\t", dtype = float)
#print(data)
reflect = data[:,0]
emiss = data[:,1]
tempdiff = data[:,4]

fig, ax = plt.subplots()
cb = ax.tricontourf(reflect, emiss, tempdiff,100, cmap = "seismic")
cbar = plt.colorbar(cb)
cbar.set_label('Temperature (K)', rotation = 270, labelpad = 13)
ax.set_xlabel('Reflectivity')
ax.set_ylabel('Emissivity')
plt.savefig('Ta_parameterplot_diff.pdf', bbox_inches='tight', format='pdf')
plt.savefig('Ta_parameterplot_diff.png', dpi=300, bbox_inches='tight', format='png')
plt.show()

解决方案

借助scipy.interpolate.griddata完成散点到规则网格的插值,再用matplotlib的contour函数绘制指定等值线,完整代码如下:

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

# 加载数据
data = np.genfromtxt("Ta_parameterspace_2mm.txt", skip_header=14, delimiter="\t", dtype=float)
reflect = data[:, 0]
emiss = data[:, 1]
tempdiff = data[:, 4]

# ---------------------- 1. 生成规则网格并插值 ----------------------
# 定义网格的x、y范围和采样密度
x_min, x_max = reflect.min(), reflect.max()
y_min, y_max = emiss.min(), emiss.max()
xi = np.linspace(x_min, x_max, 500)  # 500为采样点数,可调整
yi = np.linspace(y_min, y_max, 500)
xi, yi = np.meshgrid(xi, yi)

# 对温度数据进行插值,可选方法:'linear'/'cubic'/'nearest'
zi = scipy.interpolate.griddata((reflect, emiss), tempdiff, (xi, yi), method='cubic')

# ---------------------- 2. 绘制插值后的等值面与z=0等值线 ----------------------
fig, ax = plt.subplots()

# 绘制插值后的等值面图(替代原tricontourf,也可保留原tricontourf再叠加等值线)
cb = ax.contourf(xi, yi, zi, 100, cmap="seismic")
cbar = plt.colorbar(cb)
cbar.set_label('Temperature (K)', rotation=270, labelpad=13)

# 绘制z=0的等值线,设置颜色和线宽
ax.contour(xi, yi, zi, levels=[0], colors='black', linewidths=2)

# 设置坐标轴标签
ax.set_xlabel('Reflectivity')
ax.set_ylabel('Emissivity')

# 保存并显示图像
plt.savefig('Ta_parameterplot_diff_interp.pdf', bbox_inches='tight', format='pdf')
plt.savefig('Ta_parameterplot_diff_interp.png', dpi=300, bbox_inches='tight', format='png')
plt.show()

关键步骤说明

  • 规则网格生成:通过np.linspace控制网格的采样密度,点数越多插值结果越平滑,但计算量也会增加;np.meshgrid将一维数组转换为二维网格点,适配插值需求。
  • 数据插值:griddata函数将散点数据映射到规则网格上,'cubic'插值能生成更平滑的连续场,适合绘制清晰的等值线;若追求计算速度,可改用'linear'或'nearest'。
  • 等值线绘制:contour函数通过levels=[0]精准指定绘制z=0的等值线,通过colors和linewidths设置线条样式,确保在彩色等值面图上清晰突出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:21:27