热力图可视化参数衰减角度遇AttributeError问题求助
热力图叠加参数衰减角度矢量场时出现AttributeError错误
报错详情
Traceback (most recent call last): File "C:\Users\bk76\Angle_of_parameter_reduction.py", line 185, in <module> Q = Quiver(np.arange(0, parameter_data.shape[1], 5), np.arange(0, parameter_data.shape[0], 5), dx[::5, ::5], dy[::5, ::5], angles='xy', scale_units='xy', scale=2, color='blue') File "C:\Users\bk76\.conda\envs\tensor-gpu\lib\site-packages\matplotlib\quiver.py", line 486, in __init__ self.transform = kw.pop('transform', ax.transData) AttributeError: 'numpy.ndarray' object has no attribute 'transData'
尝试的代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LogNorm from matplotlib.quiver import Quiver # 定义二维参数数据 np.seed(1) parameter_data = np.random.rand(150, 150) # 计算参数方向角度 dy, dx = np.gradient(parameter_data) angle = np.arctan2(dy, dx) # 创建画布和坐标轴 fig, ax = plt.subplots() # 绘制参数热力图 im = ax.imshow(parameter, cmap='hot', norm=LogNorm()) # 创建参数方向矢量场 Q = Quiver(np.arange(0, parameter_data.shape[1], 5), np.arange(0, parameter_data.shape[0], 5), dx[::5, ::5], dy[::5, ::5], angles='xy', scale_units='xy', scale=2, color='blue') ax.add_collection(Q) # 添加颜色条和标签 cbar = fig.colorbar(im, ax=ax) cbar.set_label('Parameter') ax.set_xlabel('X') ax.set_ylabel('Y') # 显示图像 plt.show()
调整后的尝试代码(仍报错)
Q = Quiver(np.arange(0, parameter_data.shape[1], 5), np.arange(0, parameter_data.shape[0], 5), dx[::5, ::5], dy[::5, ::5], angles=angle[::5, ::5].ravel(), scale_units='xy', scale=2, color='blue', pivot='mid', transform=ax.transData)
问题原因与解决方法
- 核心问题:直接实例化
Quiver底层类时,未正确绑定坐标轴对象,导致类内部无法获取有效的transData坐标变换属性,触发错误。 - 正确做法:使用坐标轴对象的
quiver()方法创建矢量场,该方法会自动完成坐标轴绑定,无需手动处理变换属性。 - 修正后的关键代码:
# 替换原有的Quiver实例化和add_collection代码 Q = ax.quiver(np.arange(0, parameter_data.shape[1], 5), np.arange(0, parameter_data.shape[0], 5), dx[::5, ::5], dy[::5, ::5], angles='xy', scale_units='xy', scale=2, color='blue') - 额外修复:原代码中
ax.imshow(parameter, ...)的parameter应为parameter_data,否则会触发变量未定义错误。
内容的提问来源于stack exchange,提问作者jam_pyt
相关产品推荐
相关产品推荐

