如何用Python从含多表格的CSV生成红外传感器读数热图
解决红外传感器CSV数据转热图的问题
问题根源
你遇到的错误是因为CSV文件的每行数据是一整个包含多个数值的字符串(比如错误信息里的长串),csv.reader没有正确拆分出单个数值,导致数组里的元素都是字符串类型,无法直接转成float。另外每行末尾还有多余的逗号,也会干扰转换。
解决方案步骤
1. 正确解析CSV数据
读取文件后,对每行数据做以下处理:
- 去除行尾的逗号和空白字符
- 按逗号分割成单个数值字符串
- 将每个字符串转换为float类型
2. 分组处理15组数据
CSV里每24行对应一组24×32的传感器数据,所以按24行一组拆分所有数据。
3. 绘制每组的热图
用matplotlib的imshow绘制热图,每组生成独立的可视化窗口或保存为文件。
完整代码示例
import numpy as np import matplotlib.pyplot as plt # 读取并处理CSV数据 all_data = [] with open("serial_data.csv", "r") as file: # 跳过前2行(假设前2行是表头或无关数据) for _ in range(2): next(file) # 读取后续所有行 for line in file: # 去除行尾的换行符、逗号和多余空格 cleaned_line = line.strip().rstrip(',') # 按逗号分割成单个数值字符串,转成float row = [float(num.strip()) for num in cleaned_line.split(',')] all_data.append(row) # 转换为numpy数组,确保每行是32个数值 all_array = np.array(all_data) # 按每组24行拆分,得到15组24×32的数组 groups = np.array_split(all_array, 15) # 为每组绘制热图 for idx, group in enumerate(groups, 1): plt.figure(figsize=(10, 6)) # 绘制热图,添加颜色条 im = plt.imshow(group, cmap='inferno', aspect='auto') plt.colorbar(im, label='温度值') plt.title(f"第{idx}组传感器热图") plt.xlabel("列(32个传感器)") plt.ylabel("行(24个传感器)") # 可以选择保存图片,或者显示 plt.savefig(f"heatmap_group_{idx}.png", dpi=100) plt.show()
代码说明
strip()和rstrip(','):清理每行末尾的多余逗号和空白,避免分割出空字符串np.array_split(all_array, 15):自动将总数据拆分为15个等份(总数据行数应为15×24=360行)cmap='inferno':选择适合热图的颜色映射,你也可以换成'viridis'、'plasma'等其他配色- 保存图片的代码可以根据需要开启,避免手动截图
内容的提问来源于stack exchange,提问作者Arnav Gahlot
相关产品推荐
相关产品推荐

