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 |

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

FlowMuse AI
FlowMuse AI

节点式AI视觉创作引擎

下载

代码实现

以下是使用 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

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

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

402

2023.08.14

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

8

2026.01.15

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

38

2026.01.15

公务员调剂条件 2026调剂公告时间
公务员调剂条件 2026调剂公告时间

(一)符合拟调剂职位所要求的资格条件。 (二)公共科目笔试成绩同时达到拟调剂职位和原报考职位的合格分数线,且考试类别相同。 拟调剂职位设置了专业科目笔试条件的,专业科目笔试成绩还须同时达到合格分数线,且考试类别相同。 (三)未进入原报考职位面试人员名单。

52

2026.01.15

国考成绩查询入口 国考分数公布时间2026
国考成绩查询入口 国考分数公布时间2026

笔试成绩查询入口已开通,考生可登录国家公务员局中央机关及其直属机构2026年度考试录用公务员专题网站http://bm.scs.gov.cn/pp/gkweb/core/web/ui/business/examResult/written_result.html,查询笔试成绩和合格分数线,点击“笔试成绩查询”按钮,凭借身份证及准考证进行查询。

10

2026.01.15

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

65

2026.01.14

php与html混编教程大全
php与html混编教程大全

本专题整合了php和html混编相关教程,阅读专题下面的文章了解更多详细内容。

36

2026.01.13

PHP 高性能
PHP 高性能

本专题整合了PHP高性能相关教程大全,阅读专题下面的文章了解更多详细内容。

75

2026.01.13

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
誉天教育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号