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

霞舞
发布: 2025-08-14 17:50:23
原创
919人浏览过

使用 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 |
登录后复制

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

代码实现

以下是使用 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 绘制出更准确、更美观的圆形温度热图。 本教程提供了一个基本框架,您可以根据实际需求进行修改和扩展,例如添加等高线、调整颜色映射、以及集成到更复杂的分析流程中。

以上就是使用 Matplotlib 绘制圆形温度热图:插值与优化的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号