TypeError: Input z must be 2D, not 3D

TypeError: Input z must be 2D, not 3D

我有以下代码:

x = np.arange(0,4)
y = np.arange(6,10)
X, Y = np.meshgrid(x,y)
print(a.shape,x.shape,y.shape)
plt.contour([X,Y,],a)
plt.show()

给出以下输出:

(4, 4) (4,) (4,)
TypeError: Input z must be 2D, not 3D

显然,数组 a 是二维的,就像打印我得到的形状 (4,4) 一样。查看文档,它还给出了 contour([X, Y,] Z, [levels], **kwargs) 的语法,我相信我已经遵循了([X,Y,] 之后的逗号除外,但是当我删除它时,我得到了一个语法错误,所以我'我假设这是一个错字,但我可能是错的)。将关卡 in/taking 排除在外没有任何区别。

我做错了什么?

考虑到数组的形状,问题不在于您预期的 a 的形状,而是您不应该放置 XY 在调用 plt.contour 时出现在列表中。 我想你应该写:

plt.contour(X, Y, a)

请注意,函数签名 contour([X, Y,] Z, [levels], **kwargs) 意味着 XY(以及 levels)是可选参数(并不是说它们应该放在调用函数时列出)。 所以它也是有效的,例如,像这样调用 plt.contour :

plt.contour(a)