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
相关产品推荐
相关产品推荐

