Python绘制Contour Plot报unhashable type: 'numpy.ndarray'错如何解决?
问题原因与解决方法
- 报错
TypeError: unhashable type: 'numpy.ndarray'的核心原因是你向meshgrid传入了二维的DataFrame结构,np.meshgrid仅支持一维数组作为输入,且你调用时未加np.前缀,触发了类型校验错误。 - 额外问题:你构造的
Matrix形状和meshgrid输出的网格数组形状不匹配,plt.contour要求输入的X、Y、Z三个二维数组形状完全一致。 - 可简化代码中逐列提取D3-D8的冗余操作,直接批量提取对应列即可。
修正后可运行代码
import numpy as np import matplotlib.pyplot as plt import pandas as pd # 读取原始数据 load_var = pd.read_excel(r'path\stack.xlsx') # 提取一维的Time、Nd数组,无需额外封装为DataFrame x = load_var['Time'].values # 去重得到Nd的6个唯一取值,和D3-D8的列数对应,若你的Nd列本身就是6个值可直接取.values y = load_var['Nd'].unique() # 批量提取D3到D8列生成Matrix,无需逐列拼接 Matrix = load_var.loc[0:3337, ['D3','D4','D5','D6','D7','D8']].values.astype(float) # 生成网格,传入一维数组,必须加np.前缀 X, Y = np.meshgrid(x, y) # 自动匹配Matrix和网格的形状,若维度不匹配则转置 if Matrix.shape != X.shape: Matrix = Matrix.T # 绘制等高线图 plt.contour(X, Y, Matrix) plt.xlabel('Time') plt.ylabel('Nd') plt.show()
内容的提问来源于stack exchange,提问作者Subzero7 stack
相关产品推荐
相关产品推荐

