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

Matplotlib温度热力图:稀疏数据插值与圆形轮廓调整问题咨询

解决Matplotlib温度热力图的两个问题:插值补全与圆形轮廓调整

1. 用插值算法补充稀疏数据

针对稀疏的坐标温度数据,推荐使用scipy.interpolate模块的两种实用方法,适配不同数据分布场景:

方法1:径向基函数(RBF)插值

适合非规则分布的稀疏点,插值结果平滑,能较好保留全局温度趋势:

import pandas as pd
import numpy as np
from scipy.interpolate import Rbf
import matplotlib.pyplot as plt

# 读取CSV数据
df = pd.read_csv('temp_data.csv')
x = df['x'].values
y = df['y'].values
temp = df['temperature'].values

# 生成高密度规则网格
xi = np.linspace(x.min(), x.max(), 500)
yi = np.linspace(y.min(), y.max(), 500)
xi, yi = np.meshgrid(xi, yi)

# RBF插值(可选函数:'multiquadric'/'gaussian'/'linear',按需调整平滑度)
rbf_interp = Rbf(x, y, temp, function='multiquadric')
zi = rbf_interp(xi, yi)

方法2:网格数据插值(griddata)

适合快速生成规则网格,支持多种插值策略:

from scipy.interpolate import griddata

# 生成网格点
xi, yi = np.meshgrid(np.linspace(x.min(), x.max(), 500),
                     np.linspace(y.min(), y.max(), 500))

# 插值:'cubic'(平滑度高)/'linear'(计算快)/'nearest'(无平滑)
zi = griddata((x, y), temp, (xi, yi), method='cubic')

2. 将八角形轮廓改为圆形分布

热力图出现八角形,是因为默认正方形网格覆盖了矩形区域,只需过滤掉圆形范围外的数据即可解决:

步骤1:生成圆形掩码

先确定数据中心和半径(可手动指定或自动计算):

# 自动计算数据中心与最大内切圆半径
x_center = (x.min() + x.max()) / 2
y_center = (y.min() + y.max()) / 2
radius = min(x.max()-x_center, y.max()-y_center)

# 创建掩码:True为圆形内区域,False为圆形外
mask = (xi - x_center)**2 + (yi - y_center)**2 <= radius**2
zi_masked = np.where(mask, zi, np.nan)  # 圆形外设为NaN,绘图时会被自动忽略

步骤2:绘制圆形热力图

使用imshow或contourf绘图时,传入掩码后的数据,并设置轴比例一致:

plt.figure(figsize=(8,8))
# 绘制热力图,extent匹配坐标范围,origin='lower'修正坐标方向
im = plt.imshow(zi_masked, extent=[x.min(), x.max(), y.min(), y.max()],
                origin='lower', cmap='viridis', interpolation='bilinear')

# 添加颜色条与标注
plt.colorbar(im, label='Temperature (°C)')
plt.xlabel('X Coordinate')
plt.ylabel('Y Coordinate')
plt.title('Circular Temperature Heatmap')
plt.axis('equal')  # 确保X/Y轴比例一致,圆形不会变形
plt.show()

若使用contourf绘图,同样可应用掩码:

plt.figure(figsize=(8,8))
plt.contourf(xi, yi, zi_masked, levels=20, cmap='viridis')
plt.colorbar(label='Temperature (°C)')
plt.axis('equal')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:20:16