0

0

使用 Matplotlib 绘制圆形温度热图:插值与优化

霞舞

霞舞

发布时间:2025-08-14 17:50:23

|

975人浏览过

|

来源于php中文网

原创

使用 matplotlib 绘制圆形温度热图:插值与优化

本文档旨在指导读者使用 Matplotlib 绘制圆形温度热图。针对数据稀疏导致的热图形状失真问题,我们将介绍如何通过添加角点数据来改善插值效果,从而获得更准确的圆形温度分布可视化结果。内容涵盖数据准备、插值算法选择、圆形遮罩应用以及自定义颜色映射等关键步骤,助您轻松创建专业的热图。

数据准备

首先,我们需要准备包含坐标 (x, y) 和温度值的 CSV 数据文件。 确保数据格式正确,例如:

| x | y | temp|
| -140 | 0 | 397.32 |
| -100 | 90 | 396.76 |
| -100 | -90 | 396.34 |
| -70 | 0 | 396 |
| -50 | 44 | 395.34 |
| -50 | -44 | 395.57 |
| 0 | 140 | 396.37 |
| 0 | 70 | 395.82 |
| 0 | 0 | 393.52 |
| 0 | -70 | 393.52 |
| 0 | -140 | 395.61|
| 50 | 44 | 395.82 |
| 50 | -44 | 394.08 |
| 50 | -44 | 394.08 |
| 70 | 0 | 394.62 |
| 100 | 90 | 395.79 |
| 100 | -90 | 395.25 |
| 140 | 0 | 396.12 |

关键步骤: 为了解决热图呈现八边形而非圆形的问题,我们需要在数据集中添加位于图像四个角点的数据。 这有助于插值算法在整个区域内生成更准确的温度分布。 例如,可以添加以下数据:

| x | y | temp|
| -150 | -150 | 398 |
| 150 | 150 | 398 |
| 150 | -150 | 398 |
| -150 | 150 | 398 |

请根据实际情况调整角点温度值。

Voicepods
Voicepods

Voicepods是一个在线文本转语音平台,允许用户在30秒内将任何书面文本转换为音频文件。

下载

代码实现

以下是使用 Matplotlib 绘制圆形温度热图的完整代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata
from matplotlib.colors import LinearSegmentedColormap

# Load temperature data from CSV file
file_path = 'tcdata.csv'
data = pd.read_csv(file_path)

# Extract coordinates and temperatures from the data
x = data['x']
y = data['y']
temperatures = data['temp']

# Set the radius for the circle
radius = 150

# Create a grid for interpolation
grid_x, grid_y = np.mgrid[-radius:radius:300j, -radius:radius:300j]

# Interpolate the temperature data over the grid
grid_temperatures = griddata((x, y), temperatures, (grid_x, grid_y), method='cubic')

# Create a circular mask to limit the heatmap within the circle
mask = np.sqrt(grid_x**2 + grid_y**2) > radius
grid_temperatures = np.ma.masked_where(mask, grid_temperatures)

# Create a custom color map: blue for the lowest, red for the highest, and green for intermediate temperatures
cmap = LinearSegmentedColormap.from_list('custom_heatmap', ['blue', 'green', 'red'], N=256)

# Plot the heatmap
plt.figure(figsize=(8, 6))
plt.imshow(grid_temperatures.T, extent=(-radius, radius, -radius, radius), origin='lower', cmap=cmap)
plt.colorbar(label='Temperature (°C)')

# Set the title
plt.title('Circular Temperature Distribution Heatmap')

# Disable the grid
plt.grid(False)

# Display the plot
plt.show()

代码详解:

  1. 导入必要的库: 导入 pandas 用于数据读取,numpy 用于数值计算,matplotlib.pyplot 用于绘图,scipy.interpolate 用于数据插值,matplotlib.colors 用于自定义颜色映射。
  2. 加载数据: 使用 pandas.read_csv 函数从 CSV 文件中加载数据。
  3. 提取数据: 从加载的数据中提取 x 坐标、y 坐标和温度值。
  4. 设置半径: 定义圆形区域的半径。
  5. 创建网格: 使用 numpy.mgrid 函数创建一个二维网格,用于插值。
  6. 数据插值: 使用 scipy.interpolate.griddata 函数对温度数据进行插值。 method='cubic' 指定使用三次样条插值,可以根据数据特点选择其他插值方法,如 linear 或 nearest。
  7. 创建圆形遮罩: 创建一个圆形遮罩,用于限制热图的显示区域。
  8. 应用遮罩: 使用 numpy.ma.masked_where 函数将遮罩应用于插值后的温度数据。
  9. 自定义颜色映射: 使用 matplotlib.colors.LinearSegmentedColormap.from_list 函数创建一个自定义的颜色映射,其中蓝色代表最低温度,红色代表最高温度,绿色代表中间温度。
  10. 绘制热图: 使用 matplotlib.pyplot.imshow 函数绘制热图。 extent 参数设置图像的范围,origin='lower' 将原点设置在左下角,cmap 参数指定使用的颜色映射。
  11. 添加颜色条: 使用 matplotlib.pyplot.colorbar 函数添加颜色条,用于显示温度与颜色的对应关系。
  12. 设置标题: 使用 matplotlib.pyplot.title 函数设置图表标题。
  13. 禁用网格: 使用 matplotlib.pyplot.grid(False) 函数禁用网格线。
  14. 显示图像: 使用 matplotlib.pyplot.show 函数显示图像。

注意事项

  • 数据质量: 插值结果的准确性高度依赖于原始数据的质量。 确保数据准确无误,并尽可能增加数据点的数量,特别是在关键区域。
  • 插值方法选择: 不同的插值方法适用于不同的数据分布。 三次样条插值通常能提供较平滑的结果,但计算量较大。 可以根据实际情况选择合适的插值方法。
  • 颜色映射调整: 自定义颜色映射可以更直观地展示温度分布。 可以根据需要调整颜色映射的颜色范围和颜色数量。
  • 半径设置: 半径参数决定了圆形热图的大小。 请根据实际数据范围进行调整。

总结

通过添加角点数据并使用适当的插值方法,我们可以使用 Matplotlib 绘制出更准确、更美观的圆形温度热图。 本教程提供了一个基本框架,您可以根据实际需求进行修改和扩展,例如添加等高线、调整颜色映射、以及集成到更复杂的分析流程中。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

399

2023.08.14

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

97

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

51

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

139

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

12

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

19

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

83

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

432

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育RHCE视频教程
誉天教育RHCE视频教程

共9课时 | 1.4万人学习

尚观Linux RHCE视频教程(二)
尚观Linux RHCE视频教程(二)

共34课时 | 5.7万人学习

尚观RHCE视频教程(一)
尚观RHCE视频教程(一)

共28课时 | 4.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号