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

Matplotlib热力图映射异常:交替行错误呈X形问题求助

热力图绘制问题:交替行方向导致图像变形

我在绘制热力图时遇到问题:需要用一个Excel文件的x、y坐标数据,搭配另一个Excel文件的z数据绘图,但生成的图像交替行正确、错误,本该从左下到右上的亮区变成了X形。我的坐标数据每行是从左到右排列,下一行则是右到左向上排列,不解为什么代码没有遵循Excel里的数据顺序。

我的代码如下:

pathxy=(r'C:\Users\goofy\OneDrive\PhD\Results\No of measured data point.xlsx')
xy_df = pd.read_excel(pathxy)
x = xy_df['x'].values
y = xy_df['y'].values
data=min_df['Ec'].values

n = int(np.sqrt(len(data)))
zz = np.reshape(data, (n, n))
plt.xlim(x.min(), x.max())
plt.ylim(y.min(), y.max())

plt.imshow(zz, cmap='viridis', extent=[x.min(), x.max(), y.max(), y.min()])
plt.colorbar()
plt.show()

问题根源

你的坐标数据是蛇形(Zig-Zag)排列:奇数行从左到右,偶数行从右到左,但np.reshape是按连续的行优先顺序重组数组,导致偶数行的z数据顺序和对应坐标的排列方向完全相反,最终出现X形的错位。

修复方案

针对蛇形排列的特点,反转所有偶数行(索引从0开始,即第2、4、6...行)的z数据,让其和坐标的排列方向匹配:

修改后的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

pathxy=(r'C:\Users\goofy\OneDrive\PhD\Results\No of measured data point.xlsx')
xy_df = pd.read_excel(pathxy)
x = xy_df['x'].values
y = xy_df['y'].values
data = min_df['Ec'].values

n = int(np.sqrt(len(data)))
zz = np.reshape(data, (n, n))

# 反转所有偶数行(索引1,3,5...)的z数据
zz[1::2] = zz[1::2, ::-1]

plt.xlim(x.min(), x.max())
plt.ylim(y.min(), y.max())

plt.imshow(zz, cmap='viridis', extent=[x.min(), x.max(), y.max(), y.min()])
plt.colorbar()
plt.show()

补充说明

  • 如果你的数据是第一行就反向(第一行右到左,第二行左到右),只需把反转的行索引改成0::2即可
  • 用zz[1::2] = zz[1::2, ::-1]这种向量化操作比循环效率更高,适合大数据量场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:35:26